Python中的调用图分析器

Python中的调用图分析器,python,profiling,Python,Profiling,在我的python程序中,我使用了很多模块,并试图对调用的函数和涉及的调用链进行计数。python中是否有一个工具/模块可以为我提供这些统计信息。pydoc-k profile 将为您提供系统上的内容列表。我使用了profile和cProfile 这很容易: if __name__ == '__main__': if PROFILING: import cProfile cProfile.run("main()") else: main() 我用过这个。因为我的应用程序一次运

在我的python程序中,我使用了很多模块,并试图对调用的函数和涉及的调用链进行计数。python中是否有一个工具/模块可以为我提供这些统计信息。

pydoc-k profile

将为您提供系统上的内容列表。我使用了profile和cProfile

这很容易:


if __name__ == '__main__':
 if PROFILING:
  import cProfile
  cProfile.run("main()")
 else:
  main()

我用过这个。因为我的应用程序一次运行了许多线程,我最终得到了12000个链接,graphviz无法编译它,所以它对我来说不起作用。但是当我在一个线程上运行它时,它工作了


六年后,我遇到了同样的问题,有些问题需要使用KCachegrind来可视化呼叫链。虽然它对Linux用户来说是一个有效的选项,但要在MacOSX上安装它是非常困难的,可能在Windows上也是如此

最后,我使用了。只需几条命令,您就可以获得富有表现力的调用图:

python -m cProfile -o output.pstats path/to/your/script arg1 arg2
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png
简单的工具,快速的结果:查看:

编辑:


现在我发现,您也可以通过brew获得KCachegrind:
brew安装qcachekrind

我之前已经尝试过了。。我得到了一个错误,这就是为什么我在搜索一个工具/模块,它将使meTraceback(最近一次调用)更容易:文件“test.py”,第12行,在cProfile.run(“main()”)文件“/usr/lib/python2.6/cProfile.py”,第36行,在运行结果=prof.print\u stats(sort)文件“/usr/lib/python2.6/cProfile.py”,第80行,在print_stats import pstats importorror中:没有名为pstat的模块,你真的在问“如何在python代码中找到瓶颈,使其运行更快”?在某些级别上是的。只是,如果某个特定事件的函数调用链相当长,那么如果可以的话,我宁愿使用一种有效的替代方法。