FLASK
Flask提供了HTTP开发服务的框架,但是他本身不提供HTTP Server。内部集成的一个简单的Server只是用于开发调试。
Flask内部的HTTP服务只用于开发使用,在启动Flask run 的时候,也有提示:
WARNING: This is a development server. Do not use it in a production deployment
因为Flask不能提供一个稳定健壮的HTTP Server,所以HTTP Service必须依赖一个稳定的WSGI( Web Server Gateway Interface)容器来运行。
WSGI容器
官网上有很多WSGI容器的介绍,这里以gunicore为例,简单介绍一下使用过程。
第一步,修改启动文件
原来的服务一般是写在app.py里,或者类似的文件。
在该文件中,里面注册了FLASK的app实例。
如下:
myapp.py
# 省略部分代码。。。
app = Flask(__name__)
app.register_blueprint(blueprint)
# 这里是执行函数,需要去掉
app.run()
这里把app.run
去掉
第二步,新增wsgi.py文件
from myapp import app
if __name__ == "__main__":
app.run()
这一步是让wsgi容器调用的间接文件
第三步,使用gunicore执行flask app
gunicorn的启动是寻找flask的app
格式如下:
[project name][app name]
- project name
是刚才创建的wsgi.py,(名字不一定非要叫这个),去掉.py后就是name - app name
是wsgi.py里app的名字,这里我们取名就叫app,所以也叫app
执行命令如下:
gunicorn --bind 0.0.0.0:5000 wsgi:app
WORKER TIMEOUT?
gunicorn会启动若干worker去执行http service(默认是1,同时会启动一个守护进程),
每个worker如果没有被调用,或者调用执行时间超过timeout(默认30s),则会被killed掉,同时会打印==[CRITICAL] WORKER TIMEOUT==
如果不想设置timeout可以通过参数 --timeout 0 去掉这个限制
更多参数设置请参考这里