之前写代码需要启个nginx反向代理uwsgi, 很麻烦,后面干脆直接通过eventlet的monkeypath对http做协程处理,再之后考虑到易用性,换成了gunicorn.
Big Picture
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点
配置文件模版
#监听本机的5000端口
bind='127.0.0.1:5000'
#开启4个进程
workers=4
#服务器中在pending状态的最大连接数,即client处于waiting的数目。超过这个数目, client连接会得到一个error。
backlog=2048
#工作模式为gevent
worker_class="gevent"
#工作线程数量,该配置只在worker_class是gthread的时候游泳,gevent,eventlet 等用的是协程
threads=10
#客户端的最大连接数,只在eventlet, gevent模式下有用
worker_connections=200
#worker重启之前处理的最大requests数, 缺省值为0表示自动重启disabled。主要是防止内存泄露。
max_requests=50
#优雅重启超时时间,重启后等待10s确认连接已经处理完了。
graceful_timeout=10
# debug模式
debug=True
#pid文件
pidfile='debug.log'
#日志级别
loglevel=‘debug'
#日志输出格式化
access_log_format=%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
启动
python3 gunicorn -c conf/gunicorn.conf app-demo:app
app-demo
from flask import Flask
def create_app():
app = Flask(__name__)
return app
app = create_app()