生产环境禁用flask/django自带服务器,应选gunicorn(新手首选)、uwsgi(需精细控制)或waitress(windows/极简场景),三者均支持多进程、超时控制与并发处理。

生产环境别用 Flask/Django 自带服务器
开发时 flask run 或 python manage.py runserver 很方便,但它们是单线程、无超时控制、不抗并发的调试工具。上线后只要稍有流量(比如 10 个并发请求),就可能卡死、502、甚至被恶意请求拖垮进程。
- Flask 自带服务器默认不支持多 worker,
threaded=True仅解决轻量 IO 等待,无法应对 CPU 密集或慢数据库查询 - Django 的
runserver同样禁用在生产环境——文档明确写 “NOT for production use” - 真实错误现象:日志里反复出现
ConnectionResetError、BrokenPipeError,或者 Nginx 返回502 Bad Gateway,大概率是后端 WSGI 进程挂了或没响应
Gunicorn 是新手最稳的第一选择
Gunicorn 默认配置就能扛住中小流量,启动快、依赖少、出错反馈清晰,适合绝大多数 Flask/Django 项目。它用 prefork 模式(主进程 fork 多个 worker),天然规避 GIL 对吞吐的影响。
- 基础启动命令:
gunicorn --workers 4 myapp:app -b 127.0.0.1:8000,其中--workers建议设为2 × CPU核数 + 1(如 2 核机器用 5) - 想提升并发能力?加
--worker-class gevent,但必须先pip install gevent;注意:gevent 不兼容所有同步库(比如某些 MySQL 驱动需换PyMySQL) - 常见坑:
ImportError: cannot import name 'app'—— 检查myapp:app路径是否正确,myapp必须是可导入模块(含__init__.py),且app是全局变量名 - 性能影响:纯同步 worker(默认)适合 CPU 均衡型应用;gevent/eventlet 更适合大量 HTTP 外调、数据库长连接等 IO 密集场景
uWSGI 功能强但配置门槛高
如果你需要精细控制进程生命周期、热重载、动态负载均衡、或直接对接 Nginx 的高级特性(如请求缓冲、慢日志、max-requests 限流),uWSGI 是更底层的选择。但它不是“开箱即用”,容易因配置项冲突导致启动失败。
- 典型错误:
unable to load app 0 (mountpoint='') (callable not found)—— 多半是--module和--callable没配对,比如 Flask 应该用--module app:app,Django 则要指向wsgi:application - 和 Gunicorn 关键差异:
--processes(对应 Gunicorn 的--workers)、--threads(启用线程池)、--enable-threads(必须显式开启才生效) - 兼容性注意:uWSGI 默认不兼容
async/await,若用 ASGI(如 FastAPI),得切到uvicorn或用 uWSGI 的--plugin python3+ 特殊适配,不如直接选 Uvicorn
Waitress 适合 Windows 或极简部署场景
Waitress 是纯 Python 实现、跨平台(包括 Windows)、零 C 扩展依赖的 WSGI 服务器。它没有进程管理、不支持热重载,但胜在稳定、无编译依赖、错误提示直白,适合内网工具、CI/CD 临时服务或不能装 gcc 的老旧环境。
- 启动命令简单:
waitress-serve --host=127.0.0.1 --port=8000 myapp:app - 性能定位:比 Gunicorn 同步模式略低,但远高于 Flask 自带 server;不支持 gevent 类协程加速,也不支持进程级 reload
- 容易忽略的点:Waitress 默认开启
--ident(进程标识),但不会自动创建 pid 文件或守护进程,必须配合supervisord或systemd管理生命周期,否则终端关闭就退出
真正上线前,别只看“哪个最快”。Gunicorn 的默认行为已经覆盖 80% 场景;uWSGI 的强大,往往要用额外 3 小时调配置去换;Waitress 的“省心”,代价是放弃弹性伸缩能力。选型的关键不是参数数字,而是你愿不愿意为某个特性多写一行配置、多查一次文档、多压测一次边界。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











