我现在使用cprofile,但我发现仅仅为了查询统计数据而编写pstats代码很乏味。
我正在寻找一个可视化工具,它向我展示了我的Python代码在CPU时间和内存分配方面所做的工作。
Java世界的一些示例是VisualVM和JPrPrror。
- 这样的东西存在吗?
- 有这样做的IDE吗?
- dtrace会有帮助吗?
我知道kcachegrind for linux,但我更喜欢不用安装kde就可以在windows/mac上运行的东西。
- 如果这样的程序还不存在,它将是一个伟大的开源项目。
- @cvondrick这样的程序确实存在,并且已经提到过:kcachegrind。
- @德文,是的,但看看问题。-)
- 你知道这种技术吗:stackoverflow.com/questions/375913/…它不是视觉的,但也不是乏味的,而且很难取得效果。
- @卡尔创建了一个新的项目来重新实现kcachegrind被称为"重新发明轮子"。不是kcachegrind"不是创建新软件的一个好理由。也许如果kcachegrind不能做一件事,而这种无能是kcachegrind是什么或者它是如何工作的基础…
- @kcachegrind爱好者:任何理由不必安装kde是不使用kcachegrind的一个好理由。
- @当一个瓶颈占用了你50%的CPU时,Mikedunlavey就没问题了。当你有20个用光了5%的时候没什么用。它也不包括内存使用、线程阻塞等。
- @基本:许多人假设(只是猜测,真的)他们的程序实际上是接近最优的。这与我的经验相差甚远。这篇文章讨论了它背后的数学原理,如果你是一个非常业余的8分钟视频演示,这里就有一个。
我和一个朋友写了一个名为snakeviz的python概要文件查看器,它在Web浏览器中运行。如果您已经成功地使用了runsnakerun snakeviz,那么它可能不会增加那么多的值,但是snakeviz更容易安装。
编辑:snakeviz支持python 2和3,并在所有主要系统上工作。
我只知道runsnakerun。
前一段时间也有人谈到Pydev(Eclipse)中的一个集成分析器,但我不知道它是否能看到曙光。
更新:不幸的是,runsnakerun似乎不再被维护,它不支持python 3。
- +1代表runsnakerun。最好的工具。
- runsnakerun很好,但不幸的是它目前不能在python 3中工作。(2014年6月为真。)
- @拉姆:谢谢你的信息,真是不幸。
- 我用的是比重计。它是一种不同的动物,但很有用。
- 我喜欢runsnakerun,但我非常不喜欢它如何显示呼叫者和被呼叫者。runsnakerun将显示每个调用方/被调用方的调用计数、本地时间和累计时间的"总计"值。所以,你可以有一个函数,它的累计时间是5秒,但是被调用方的累计时间是100秒。不是那么直观,也不像公共电话电报机提供的那样有用。pstats使用与相关函数相关的上下文信息为调用者/被调用者统计提供更有意义的数字。不知道另一个使此易于查看的查看器。
- 另外,可以通过"python-m pstats"运行pstats,这样就不需要"编写pstats代码来查询统计数据"。但是没有GUI。
我使用gprof2dot.py。结果是这样的。我使用这些命令:
1 2
| python -m cProfile -o profile.dat my_program.py
gprof2dot.py -f pstats profile.dat | dot -Tpng -o profile.png |
您需要安装graphviz和gprof2dot.py。您可能需要一个方便的shell脚本。
- 如果您输出SVG而不是PNG(使用dot-tsvg-o profile.svg),您将能够使用浏览器搜索输出图形,并且可以在不使用Jaggie的情况下缩放图像。
Spyder还为cprofile提供了一个非常好的图形用户界面:

用于Visual Studio的python工具包含一个非常完善的图形探查器:http://www.youtube.com/watch?V=VCX7RLPYEZ&HD=1
http://pytools.codeplex.com/
- 是的,我在.NET上使用这个分析器。它只是强调了CProfile是多么可悲…
此人创建了一个图形化的配置文件,如本文所述。也许你可以把它作为自己工作的起点。
- 这很酷,但显然只针对C/C++。但它使用了python。
kcachegrind包括一个名为qcachegrind的版本,它可以在Mac OS X和Windows上运行。
- 此外,OP似乎误解了kcachegrind对Linux的依赖性。在debian/ubuntu/mint上,您所需要的就是apt-get install kcachegrind,它只安装3 kde相关库。
- @在安装Ubuntu 17.04时,apt install kcachegrind希望安装102个软件包,包括约40 kde库。
- @新的ubuntu:xenial上的mehaase可能是原来的三倍,但它是用于开发环境的,我几乎不认为它是一个问题。实际上,apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends kcachegrind | grep kde | grep Depends | sort -u | wc -l只表示13。
试试蛇维兹。非常容易安装(通过PIP)并且它是基于浏览器的。
https://jiffyclub.github.io/snakeviz/
python调用图生成的图片与maxy的答案非常相似。它还显示了每个函数的总时间,出于某种原因,它没有反映在示例图中。
考虑PyFlame+火焰图
pyflame:python+flamegraph的ptracing profiler
https://github.com/uber/pyflame
可以使用pyflame跟踪运行中的python进程。
我已经编写了一个基于浏览器的可视化工具profile_eye,它在gprof2dot的输出上运行。
gprof2dot非常擅长搜索许多分析工具输出,并且在图形元素放置方面做得很好。最后的渲染是一个静态图形,通常非常混乱。
使用d3.js,可以通过未聚焦元素、工具提示和鱼眼失真的相对淡入淡出来消除大部分杂波。
有关比较,请参见配置文件"Eye对gprof2dot使用的规范示例的可视化"。对于python,请参见cprofile输出示例。
我用过PLOP,发现它很轻。快速了解性能。
- vprof是一个类似的工具,也使用火焰图,但它也可以做内存分析。不幸的是,它只显示累积时间,而不显示在函数中花费的总时间。