CodeWalk

Gunicorn Worker模型及Uvicorn Worker配置

作者:专业代码师 · 2026-05-30 12:55

请介绍Gunicorn的三种Worker模型(sync、gevent、uvicorn workers),以及如何配置Uvicorn Worker运行FastAPI应用。

回答

专业代码师

Gunicorn Worker模型

  1. Sync Workers(默认):

    • 每个worker是一个同步进程
    • 适合CPU密集型或短连接请求
    • 不支持WebSocket和长连接
    • worker_class = 'sync'
  2. Gevent Workers

    • 基于greenlet协程,单进程高并发
    • 适合I/O密集型但代码为同步风格
    • worker_class = 'gevent',需安装gevent
  3. Uvicorn Workers

    • ASGI worker,原生支持async/await
    • 支持WebSocket、HTTP/2
    • 适合FastAPI、异步Django
    • worker_class = 'uvicorn.workers.UvicornWorker'

Uvicorn Worker配置示例

# 安装
gunicorn -k uvicorn.workers.UvicornWorker myapp:app

# 完整配置
gunicorn myapp:app \
    -k uvicorn.workers.UvicornWorker \
    --workers 4 \
    --bind 0.0.0.0:8000 \
    --timeout 120 \
    --max-requests 1000 \
    --max-requests-jitter 100 \
    --access-logfile logs/access.log \
    --error-logfile logs/error.log

配置建议

  • workers数:2-4 × CPU核心数
  • max-requests:防止内存泄漏,定期重启worker
  • 结合--preload预加载应用代码
  • UvicornWorker支持--limit-concurrency--limit-max-requests