安装gunicorn
pip install gunicorn
// windows平台似乎不支持gunicorn
配置
配置文件要是.py结尾的
比如 gunicorn.conf.py
可以和flask的app.py放在同一目录下
配置参数说明
示例:
import multiprocessing
bind = '127.0.0.1:5000' # 原来的flask的运行地址
# 访问日志和错误日志
accesslog = './logs/access.log'
errorlog = './logs/error.log'
workers = multiprocessing.cpu_count() * 2 + 1 # 进程数量
backlog = 2048 # 未决连接的最大数量,即等待服务的客户的数量。默认2048个,一般不修改
worker_connections = 1000 # 最大客户端并发数量,默认情况下这个值为1000。
#worker_class = "gevent"
daemon = False # 是否以守护进程启动,默认false;
timeout = 50
debug = True
#debug = False
proc_name = 'app_name'
启动命令
gunicorn app:app -c gunicorn.conf.py
flask logger与gunicorn日志整合
在app.py中添加以下代码
if __name__ != '__main__':
# 如果不是直接运行,则将日志输出到 gunicorn 中
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
在gunicorn的error.log里就可以看到flask logger输出的日志
worker class
sync: 默认的工作进程类,也称为同步工作进程。每个工作进程都是单线程的,采用同步阻塞方式处理请求。当请求处理时间较长时,会阻塞其他请求的处理,不适合高并发或耗时较长的请求。
默认的、最简单的worker模式,是同步模式。
每个worker进程,一次只处理一个请求;如果此时又有其他请求被分配到这个worker进程,那只好被阻塞了,要先等第一个请求完成 。并且,一个请求一个进程,并发时,显然很占CPU和内存。
因此,只适合在访问量不大、CPU密集而非I/O密集的情形。
不过也不是没有好处;好处是,即使一个worker进程crash了,也只会影响一个请求。
gevent: 使用gevent库的工作进程类。gevent是基于协程的并发库,可以处理更多的并发连接。它利用非阻塞I/O和事件循环来实现高效的并发处理。
异步worker,能同时处理不止一个请求,就不会出现上面同步worker那样,一个请求就把后续请求都block阻塞住的情况了。
但是似乎不能用于python的mysql操作,只能用同步。。 开异步高并发就一直出mysql的各种error
参考:https://www.cnblogs.com/shengulong/p/7202294.html