启动方式:uwsgi 和gunicorn如何选择 ?
项目 |
uWSGI |
Gunicorn |
协议 |
uWSGI 协议(可用 HTTP/socket) |
HTTP 协议 |
启动方式 |
命令或 .ini 配置文件 |
命令参数或 systemd 配置 |
兼容框架 |
支持 WSGI、uWSGI、FastCGI 等 |
仅支持 WSGI |
性能 |
高性能、极可调 |
高性能、默认参数也够用 |
配置复杂度 |
❌ 比较复杂 |
✅ 配置简单 |
社区活跃 |
⭐ 停滞不前,主作者不活跃 |
⭐⭐ 活跃,现代化持续维护 |
热部署支持 |
✅ 支持 reload,graceful reload |
✅ 支持 reload,supervisor/daemon 都支持 |
Nginx 代理推荐方式 |
uwsgi_pass |
proxy_pass |
Django 官方文档明确推荐 Gunicorn,因为更简单
推荐选择依据:
使用场景 |
推荐服务器 |
✅ 你用的是 Docker / 容器化部署 |
Gunicorn |
✅ 希望部署简单,配置快速,现代工具支持 |
Gunicorn |
✅ 你用 Supervisor、systemd 管理进程 |
Gunicorn |
✅ 用 Python async/await、FastAPI 等协程框架 |
Gunicorn(配 uvicorn workers ) |
❗需要极限性能调优、复杂进程模型、XML 配置需求 |
uWSGI |
❌ 不想折腾配置文件 .ini / .xml |
Gunicorn |
中文互联网上的django部署教程大多数都是教用uWSGI而不是Gunicorn。主要是很多早期教程、博客、书籍(包括《Python 编程:从入门到实践》)都采用了 uWSGI 为部署示例。导致后续内容沿用这套“模板式部署”。
结论 |
解释 |
中文教程偏向 uWSGI |
因为历史原因、教程复制、宝塔支持等传统习惯 |
Gunicorn 更现代、适合现在的开发部署模式 |
但中文教程尚未形成认知切换 |
如果你重视部署效率、容器兼容性、WebSocket/SSE 支持 |
✅ 强烈建议用 Gunicorn + UvicornWorker |
--------------------