在看Gunicorn之前先了解下,什么是WSGI。
WSGI是Python Web Server Gateway Interface的简称。WSGI标准在PEP333中定义并被许多框架实现,它规定了一种Web服务器与Web应用程序/框架之间推荐的标准接口,以确保Web应用程序在不同的Web服务器之间具有可移植性,可以让Web应用程序的开发者把精力集中到自己的领域。
客户端和服务器端进行沟通遵循了HTTP协议, 可以说HTTP就是它们之间沟通的语言。 从HTTP请求到我们的Web程序之间, 还有另外一个转换过程——从HTTP报文到WSGI规定的数据格式。 WSGI则可以视为WSGI服务器和我们的Web程序进行沟通的语言。
Gunicorn理论
Gunicorn“绿色独角兽”是一个被广泛使用的高性能的python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn)项目,使用pre-fork[1] worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。
Gunicorn是主流的WSGI容器之一,它易于配置,兼容性好,CPU消耗很少,它支持多种worker模式:
- 同步worker:默认模式,也就是一次只处理一个请求。
- 异步worker:通过Eventlet、Gevent实现的异步模式
- 异步IOWorker:目前支持gthread和gaiohttp
- Tronado worker:tornado框架
工作模式是通过work_class参数配置的值:缺省值:sync
- sync
- Gevent
- Eventlet
- tornado
- gaiohttp
- gthread
Sync Workers(sync)
最简单的同步工作模式
Async Workers(gevent,eventlet)
gevent和eventlet都是基于greenlet库,利用python协程实现的
Tornado Workers(tornado)
利用python Tornado框架实现
AsyncIO Workers(gthread,gaiohttp)
gaiohttp利用aiohttp库实现异步IO,支持web socket
gthread采用的事线程工作模式,利用线程池管理连接
Gunicorn使用
安装
pip install gunicorn
启动
gunicorn [OPTIONS] MODULE_NAME:VARIABLE_NAME
一个简单的示例
# -*- encoding: utf-8 -*-
'''
@File : app.py
@Time : 2020/05/10 00:47:15
@Author : Jesse Chang
@Contact : jessechang2358@gmail.com
@Version : 0.1
@License : Apache License Version 2.0, January 2004
@Desc : None
'''
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
可以使用以下命令启动应用:
gunicorn --workers=6 app:app -b 0.0.0.0:8888
- --workers是开启的进程数量,推荐值是
CPU个数*2+1
,CPU个数的获取方式 [2] - 第一个app是模块文件的名字,如果包含文件夹可以使用
.
连接 - 第二个app是文件中Flask实例的名字
- -b 指定监听地址和端口
参考资料:
网友评论