某些 Python 程序执行时间很长,我们想对其中某些热点代码进行分析,可以使用一些工具记录执行过程中的热点函数和行。

使用 cProfile (内置标准库)

cProfile 是 Python 最常用的性能分析工具,可以统计每个函数的调用次数和耗时。

命令行直接运行:python -m cProfile -s cumulative your_script.py

-s cumulative 表示按累计耗时排序,这能帮你迅速定位哪个函数最“吃”性能。

生成热力图 (SnakeViz)

单纯看命令行输出可能比较枯燥,SnakeViz 可以将 cProfile 的结果转化成交互式的网页热力图(矩形树图或冰柱图)。

使用步骤:

  1. 安装:pip install snakeviz
  2. 生成性能数据文件: python -m cProfile -o program.prof your_script.py
  3. 启动可视化: snakeviz program.prof

PySpy (采样分析器)

如果你想在不停止程序的情况下(比如你的搜索算法正在后台运行),实时观察它的运行状态,py-spy 是最佳选择。基于采样(Sampling),对程序性能几乎没有影响。

  • 安装:pip install --upgrade py-spy
  • 生成火焰图 (Flame Graph): py-spy record -o profile.svg -- python your_script.py
  • 生成的 SVG 文件可以用浏览器打开,越宽的方块代表耗时越长。

综合来看,PySpy 的效果最好,不影响程序的性能,而且热点追踪精确到行。