【问题标题】:Call-graph profilers in PythonPython 中的调用图分析器
【发布时间】:2010-11-03 06:16:19
【问题描述】:

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

【问题讨论】:

  • 你真的是在问“我如何才能找到我的 python 代码中的瓶颈,以便让它运行得更快”?
  • 在某些层面上是的。只是如果特定事件的函数调用链很长,那么如果可以的话,我宁愿用一种有效的替代方法代替。

标签: python profiling


【解决方案1】:

我用过这个。它对我的目的不起作用,因为我的应用程序同时运行了许多线程,并且我最终得到了 12000 个链接,而 graphviz 无法编译它。但是当我在一个线程上运行它时它起作用了。

http://pycallgraph.slowchop.com/

【讨论】:

    【解决方案2】:

    pydoc -k 配置文件

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

    很简单:

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

    【讨论】:

    • 我早点尝试过......但我得到了错误,这就是为什么我正在寻找一个工具/模块,这会让我更容易
    • Traceback(最近一次调用最后):文件“test.py”,第 12 行,在 cProfile.run("main()") 文件 "/usr/lib/python2.6 /cProfile.py”,第 36 行,运行结果 = prof.print_stats(sort) 文件“/usr/lib/python2.6/cProfile.py”,第 80 行,在 print_stats import pstats ImportError: No module named pstats跨度>
    【解决方案3】:

    六年后我有同样的问题,一些people recommend 使用 KCachegrind 来可视化调用链。虽然它对 Linux 用户来说是一个有效的选择,但它很难安装在 Mac OSX 上,而且可能也安装在 Windows 上。

    最后,我改用gprof2dot。只需几个命令,您就会拥有富有表现力的调用图:

    python -m cProfile -o output.pstats path/to/your/script arg1 arg2
    gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png
    

    简单的工具,快速的结果:查看:https://github.com/jrfonseca/gprof2dot

    编辑:

    现在我发现你也可以通过 brew 获得 KCachegrindbrew install qcachekrind

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2011-06-24
      • 2012-08-23
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      相关资源
      最近更新 更多