首页
Flask
Flask部署
Git
linux
Python
UPS
VPN
Web
Windows
其他
编辑
发表
保存草稿
标题
目录
Flask部署
Flask
Git
linux
Python
UPS
VPN
Web
Windows
其他
新增目录
新增目录
×
###Gunicorn介绍 Gunicorn 'Green Unicorn' 是一个Unix下的WSGI HTTP服务器,它是一个从Ruby的Unicorn项目移植的pre-fork worker模型。支持eventlet, greenlet *pre-fork worker模型:* 一个主(master)进程管理多个工作(worker)进程,所有请求和响应均由工作进程处理。主进程是一个简单的循环(loop),监听和响应工作进程传递的信号。列如,主进程监听到TTIN信号,增加工作进程的数量;TTOU信号,减少工作进程数量;CHLD信号(工作进程运行异常),重启工作进程。 *eventlet :* 主要是用于网络并发的库,专注于代码运行逻辑。 *greenlet :* 是从Stackless中分离的项目。greenlet也叫微线程、协程,它的调度是由程序明确控制的,所以执行流程是固定的、明确的。(线程的调度是由操作系统控制,所以执行顺序无法预料。协程之间的切换代价远比线程小) --- ###安装 目前Gunicorn只能运行在Linux环境中,不支持windows平台 **安装** `pip3 install gunicorn` **开启服务** 四种方式开启服务 1. `gunicorn -w 4 -b :5000 demo:app --worker-class sync` 2. `gunicorn -w 4 -b :5000 demo:app --worker-class gevent` 3. `gunicorn -w 4 -b :5000 demo:app --worker-class tornado` 4. `gunicorn -w 4 -b :5000 demo:app --worker-class eventlet` 其中: *-w 4 :* 开启4个工作进程,每个工作进程都是一个加载 python 应用程序的 UNIX 进程,工作进程之间没有共享内存。建议 workers 数量是: ***CPU内核个数的两倍加1*** *-b :5000 :* 绑定端口5000,即0.0.0.0:5000 *demo:app :* 第一个 demo 指的是 demo.py 文件,第二 app 指的是 flask 应用的名字(app = Flask(\_\_name\_\_))。 *--worker-class sync :* 运行方式,建议: IO受限-使用gevent或asyncio; CPU受限-建议增加workers数量; 不确定内存占用-建议使用gthread; 不知道如何选择-建议增加workers数量。 *gthread:* gunicorn 允许每个worker拥有多个线程。多线程模式下每个工作进程都会加载一次,同一个工作进程的每个线程共享相同的内存空间。使用threads, 运行方式会是gthread,如: `gunicorn -w 5 --threads=2 main:app` 等同于: `gunicorn -w 5 --threads=2 --worker-class=gthread main:app` --- **伪线程gevent(协程)** `gunicorn --worker-class=gevent --worker-connections=1000 -w 3 main:app` work-connections 是对gevent worker类的特殊设置 建议workers数量 仍然是 ***CPU内核个数的两倍加1*** 在这种情况下,最大的并发请求数 是3000(3个工作进程 * 1000连接伪线程/工作进程) --- ###备注 Gunicorn 对静态文件的支持不太好,所以生成环境下常用Nginx作为反向代理服务器。