logo头像

Always believe youself.

使用gunicorn部署flask项目

WSGI 协议

Web框架致力于如何生成HTML代码,而Web服务器用于处理和响应HTTP请求。Web框架和Web服务器之间的通信,需要一套双方都遵守的接口协议。WSGI协议就是用来统一这两者的接口的。

WSGI 容器

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多,所以这里我也选择用Gunicorn作为容器。

gunicorn介绍

gunicorn是一个python Wsgi http server,只支持在Unix系统上运行,来源于Ruby的unicorn项目。Gunicorn使用prefork master-worker模型(在gunicorn中,master被称为arbiter),能够与各种wsgi web框架协作。

gunicorn安装

gunicorn安装非常简单,使用命令pip install gunicorn即可。一般使用它,主要是为使用其异步的worker模型,还需要安装对应的异步模块。

$ pip install greenlet # 使用异步必须安装
$ pip install eventlet # 使用eventlet workers
$ pip install gevent   # 使用gevent workers

启动参数

gunicorn通常使用的参数如下:

-c CONFIG, --config=CONFIG
# 设定配置文件。
-b BIND, --bind=BIND
# 设定服务需要绑定的端口。建议使用HOST:PORT。
-w WORKERS, --workers=WORKERS
# 设置工作进程数。建议服务器每一个核心可以设置2-4个。
-k MODULE
# 选定异步工作方式使用的模块。

在shell中输入你的启动配置,比如:

$ gunicorn -w 3 -b 127.0.0.1:8080 app:app
# 此处app:app中,第一个app为flask项目实例所在的包,第二个app为生成的flask项目实例

gunicorn -k 参数详解 (worker type)

worker_class
-k STRTING, --worker-class STRTING

要使用的工作模式,默认为sync。

可引用以下常见类型“字符串”作为捆绑类:

sync
eventlet:需要下载eventlet>=0.9.7
gevent:需要下载gevent>=0.13
tornado:需要下载tornado>=0.2
gthread
gaiohttp:需要python 3.4和aiohttp>=0.21.5

分三种:

sync 底层协作是每一个请求都是由一个 process 处理的。
gthread 是每个请求都是由一个 thread 处理。
eventlet、gevent、tarnado 底层利用了 非同步 IO。让一个 process 在等待 IO 回应时继续处理下个请求。

总结来说

eventlet 和 gevent 非同步 IO 性能较好,能够适应高并发的压力。