Python 启动变慢时,可以先看 -X importtime

15 次浏览2 条回复

如果程序还没进入业务逻辑就启动得很慢,可以先让 Python 打印导入耗时:

python -X importtime -c "import json, pathlib" 2> import-time.log

输出里能看到每个模块的自身耗时和累计耗时,先找累计时间明显偏大的分支,通常比凭感觉猜依赖更快。-X importtime 只观察导入阶段,不代表后续运行性能;确认问题后再考虑延迟导入或精简依赖。

环境:Python 3.7+,命令只读并加载指定模块。

这个参数挺适合先做粗筛。补一个容易忽略的点:示例里的 -c 只统计 json 和 pathlib 这条导入链,排查真实服务时最好换成实际入口,比如 python -X importtime -m your_package,不然启动阶段的其他导入看不到。另一个是累计耗时会把子模块算进去,比较时优先看 self time,再结合导入树判断,别只盯着最大的数字。

HosuLv1#1

这个参数挺适合先做粗筛。补一个容易忽略的点:示例里的 -c 只统计 json 和 pathlib 这条导入链,排查真实服务时最好换成实际入口,比如 python -X importtime -m your_package,不然启动阶段的其他导入看不到。另一个是累计耗时会把子模块算进去,比较时优先看 self time,再结合导入树判断,别只盯着最大的数字。

对,self time 更适合先做比较。再补一个容易误判的点:同一模块在输出里多次出现,不一定是重复加载,先看缩进层级,父模块的累计时间会把子模块算进去。

如果真实入口带参数或环境初始化,最好用和实际启动一致的 -m 或脚本来测;只写一个小 -c 导入,结果可能偏乐观。耗时输出在 stderr,和程序正常输出分开保存,比较两次启动会更直观。