Gunicorn(Green Unicorn)是一个 Python WSGI HTTP 服务器,常用于部署如 Flask、Django 等 Python Web 应用。其高性能和多种并发处理模型(worker 类型)使其在生产环境中广泛使用。
1. sync(默认,同步工作模式)
- 特点:每个 worker 使用一个线程来处理请求,阻塞式处理,适用于 CPU 密集型或请求处理时间短的服务。
- 优点:简单、稳定,适用于大多数标准应用。
- 缺点:遇到 I/O 密集型操作(如访问数据库、外部 API)时容易阻塞,性能受限。
1
| gunicorn app:app --workers 4 --worker-class sync
|
2. gevent(协程模式,基于 greenlet)
- 特点:使用 协程并发模型,基于
gevent 库,适用于 高并发、I/O 密集型 应用。
- 优点:支持非阻塞异步 I/O,节省内存资源,处理并发能力强。
- 缺点:代码需支持异步非阻塞编程;某些同步阻塞操作可能导致协程失效。
1
| gunicorn app:app --workers 4 --worker-class gevent
|
3. eventlet(另一个协程模型)
- 特点:和 gevent 类似,也用于 I/O 密集型场景,但基于
eventlet 库。
- 优缺点:与
gevent 相似,适合使用 eventlet 的项目(例如使用了 WebSocket 的框架)。
1
| gunicorn app:app --workers 4 --worker-class eventlet
|
4. asyncio(Python 3.5+ 原生协程支持)
- 特点:基于
asyncio 模块,支持 async def 协程函数,适合现代异步框架(如 FastAPI)。
- 前提:Gunicorn 20.1+ 才支持。
- 缺点:需要搭配
--worker-class uvicorn.workers.UvicornWorker 等使用。
1
| gunicorn app:app --workers 4 --worker-class asyncio
|
FastAPI 推荐使用方式:
1
| gunicorn app:app --workers 4 --worker-class uvicorn.workers.UvicornWorker
|
5. tornado(不常用)
- 特点:使用 Tornado 的异步特性,需要安装 tornado。
- 一般在需要 Tornado 特性时使用。
6. Worker 选择建议
| 场景 |
建议使用的 worker class |
| 普通 Flask/Django 应用 |
sync(默认) |
| 高并发 + I/O 密集型 |
gevent / eventlet |
| 使用 async/await 的应用 |
asyncio / uvicorn.workers.UvicornWorker |
| WebSocket 应用 |
gevent / eventlet |