小编典典

如何使用Python分析器获得调用树?

python

我曾经使用内置在系统监视器
应用程序中的漂亮Apple Profiler 。只要您的C ++代码是用调试信息编译的,您
就可以对正在运行的应用程序进行采样,并且它将打印出一个缩进的树,
告诉您该函数花了父函数时间的百分比
(以及主体函数与其他函数调用的时间) 。

例如,如果main调用了function_1和function_2,先function_2调用function_3,然后调用main调用function_3

main (100%, 1% in function body):
    function_1 (9%, 9% in function body):
    function_2 (90%, 85% in function body):
        function_3 (100%, 100% in function body)
    function_3 (1%, 1% in function body)

我会看到这样的想法,并认为:“
主体代码中的某些事情花费了很长时间function_2。如果我希望我的程序更快,那是我
应该开始的地方。”

如何最轻松地为Python
程序获得此准确的概要分析输出?

我见过有人说要这样做:

import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time")  # Or cumulative
stats.print_stats(80)  # 80 = how many to print

但是,与优雅的调用树相比,这非常混乱。如果
您可以轻松做到这一点,请告诉我,这会有所帮助。


阅读 277

收藏
2020-12-20

共1个答案

小编典典

在此库http://pycallgraph.slowchop.com/中查看调用图。它
真的很好。如果要分析特定功能,请查看
http://mg.pov.lt/blog/profiling.html

这是来自profilehooks模块的结果。

2020-12-20