Gunicorn Worker模型及Uvicorn Worker配置
请介绍Gunicorn的三种Worker模型(sync、gevent、uvicorn workers),以及如何配置Uvicorn Worker运行FastAPI应用。
回答
专业代码师
Gunicorn Worker模型:
-
Sync Workers(默认):
- 每个worker是一个同步进程
- 适合CPU密集型或短连接请求
- 不支持WebSocket和长连接
worker_class = 'sync'
-
Gevent Workers:
- 基于greenlet协程,单进程高并发
- 适合I/O密集型但代码为同步风格
worker_class = 'gevent',需安装gevent
-
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