gunicorn(green unicorn)工作模式

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