我现在使用cProfile,但我发现编写pstats代码只是为了查询统计数据很繁琐。
我正在寻找一个可视化工具,可以向我展示我的 Python 代码在 CPU 时间和内存分配方面的表现。
Java 世界的一些示例是 visualvm 和 JProfiler。
我知道适用于 Linux 的 KCachegrind,但我更喜欢可以在 Windows/Mac 上运行而无需安装 KDE 的东西。
我和一个朋友编写了一个名为 SnakeViz 的 Python 配置文件查看器,它在 Web 浏览器中运行。如果您已经成功使用 RunSnakeRun SnakeViz 可能不会增加那么多价值,但 SnakeViz 更容易安装。
编辑:SnakeViz 支持 Python 2 和 3,并且适用于所有主要系统。
我只知道RunSnakeRun。
前段时间也有一些关于 PyDev (Eclipse) 中集成分析器的讨论,但我不知道它是否会出现。
更新:不幸的是,RunSnakeRun 似乎不再维护,并且它不支持 Python 3。
我使用 gprof2dot.py。结果看起来像这样。我使用这些命令:
python -m cProfile -o profile.dat my_program.py
gprof2dot.py -f pstats profile.dat | dot -Tpng -o profile.png
您需要安装graphviz和gprof2dot.py。您可能喜欢一个方便的 shell 脚本。
Spyder 还为 cProfile 提供了一个非常漂亮的 GUI:
尝试蛇形维兹。非常容易安装(通过 pip)并且基于浏览器。
此人创建了一个图形配置文件,如此处所述。也许您可以将其作为您自己工作的起点。
Visual Studio 的 Python 工具包含一个做得非常好的图形分析器:http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1
Python Call Graph 生成的图片与 maxy 的答案 中的图片非常相似。它还显示每个函数的总时间,由于某种原因,它没有反映在示例图中。
我编写了一个基于浏览器的可视化工具profile_eye,它对gprof2dot的输出进行操作。
gprof2dot 非常擅长处理许多分析工具的输出,并且在图形元素放置方面做得很好。最终的渲染是静态图形,通常非常混乱。
使用 d3.js 可以通过未聚焦元素、工具提示的相对淡入淡出和 鱼眼失真 来消除大部分混乱。
为了进行比较,请参阅 gprof2dot 使用的规范示例的 profile_eye 可视化。特别是对于 Python,请参阅cProfile 输出示例。
考虑 pyflame + 火焰图
Pyflame:Python + 火焰图的 Ptracing Profiler
https://github.com/uber/pyflame
您可以使用 pyflame 追踪正在运行的 python 进程。
我用过plop,发现它非常轻量。快速了解性能。