Flask 应用启动要多久?时间都花在哪?--preload、惰性导入、字节码缓存各自有多大作用?这篇用真实的 import 计时、-X importtime 和 gunicorn 的首个 200 响应时间逐项量出来(这是 Flask 系列的最后一篇,健康检查见第 179 篇,优雅关闭见第 180 篇)。
解释器本身(pass) 19 ms import flask 106 ms import flask + flask_sqlalchemy 222 ms 重一些的一组(sqlalchemy、pydantic、marshmallow、cryptography、jwt、apispec) 283 ms
上一篇:容器信号处理。这是 Flask 系列的最后一篇。
计时在 macOS 上、Python 3.14 下完成,数字会随机器变化,比例更有参考价值。
有缓存(预热过):285 ms | 没有缓存、每次重新编译:1145 ms | 比值 4.0×
flask_sqlalchemy 99.1 ms(累计) flask 78.0 ms(累计) marshmallow 18.0 ms(累计) jwt 15.0 ms(累计) pydantic 10.1 ms(累计) cryptography.fernet 6.8 ms(累计)
配置 首个 200(ms) 之后 12 个请求中最慢(ms) 轻应用 108 0.6 重 import 266 0.7 重 import + --preload 273 0.7 重 import 放进视图(惰性) 262 150.5
--timeout 2 → 3124 ms 后第一个 200;日志里 Booting worker 1 次、WORKER TIMEOUT 0 次 --timeout 30 → 3177 ms 后第一个 200;日志里 Booting worker 1 次、WORKER TIMEOUT 0 次