flask run 为什么不能用在生产?它真的慢吗?和 gunicorn 差在哪?这篇用真实的压测把速度、并发、重载与进程模型逐项对比,答案和「它慢所以不能用」可能不一样。
['WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.']
上一篇:压测下的全局状态问题;下一篇:Gunicorn 启动 Flask。
flask run(开发服务器,默认多线程) /hello 2224 请求/秒(p99 24 ms,失败 0) | /wait 64 个请求总耗时 1.6 秒 flask run --without-threads /hello 78 请求/秒(p99 425 ms,失败 0) | /wait 64 个请求总耗时 33.3 秒 gunicorn sync × 4 /hello 3673 请求/秒(p99 24 ms,失败 0) | /wait 64 个请求总耗时 8.6 秒 gunicorn gthread 2 × 8 /hello 3024 请求/秒(p99 16 ms,失败 0) | /wait 64 个请求总耗时 3.1 秒
压测工具是系统自带的 ApacheBench,与被测服务同机运行,每个数字只测一次。
改文件之前 → 'hi';改文件后 0.9 秒内请求得到 → 'hi v2'(重载器重启了进程) gunicorn(没有 --reload):改文件之前 'hi',2 秒之后 'hi'(不会自动重载)
flask run(开发服务器,默认多线程) 相关进程数(含 master / 父进程)1 gunicorn sync × 4 相关进程数(含 master / 父进程)5