← 中文资源

简体中文版本

用 cProfile 剖析 Python 热点函数

用 cProfile 与 pstats 按累计时间排序函数,修复真正的热点而不是凭直觉猜测。

阅读英文原文

目标

请求处理器很慢,团队却凭直觉优化了错误的函数。本配方对可复现的入口用 cProfile 采样,再用 pstats 按累计时间排序输出前十五个函数,找出真正占主导的调用路径;优化后重新剖析确认该函数跌出榜单,提醒应关注相对排名而非绝对耗时。

步骤要点

  1. 对入口用 cProfile 采样。
  2. 用 pstats 按累计时间排序输出前十五。
  3. 针对首要热点优化后重新剖析对比。
  4. 长时间运行时改用采样剖析器降低开销。
import cProfile, pstats
cProfile.run('main()', 'prof.out')
stats = pstats.Stats('prof.out').sort_stats('cumtime')
stats.print_stats(15)

排错提示

  • 剖析器有开销,应看相对排名。
  • 热点在 C 扩展里需行级工具。
  • 不显示内存分配。

适用边界

  • cProfile 有额外开销。
  • 行级归因需额外工具。