目标
请求处理器很慢,团队却凭直觉优化了错误的函数。本配方对可复现的入口用 cProfile 采样,再用 pstats 按累计时间排序输出前十五个函数,找出真正占主导的调用路径;优化后重新剖析确认该函数跌出榜单,提醒应关注相对排名而非绝对耗时。
步骤要点
- 对入口用 cProfile 采样。
- 用 pstats 按累计时间排序输出前十五。
- 针对首要热点优化后重新剖析对比。
- 长时间运行时改用采样剖析器降低开销。
import cProfile, pstats
cProfile.run('main()', 'prof.out')
stats = pstats.Stats('prof.out').sort_stats('cumtime')
stats.print_stats(15)
排错提示
- 剖析器有开销,应看相对排名。
- 热点在 C 扩展里需行级工具。
- 不显示内存分配。
适用边界
- cProfile 有额外开销。
- 行级归因需额外工具。