我曾经使用内置在系统监视器 应用程序中的漂亮Apple Profiler 。只要您的C ++代码是用调试信息编译的,您 就可以对正在运行的应用程序进行采样,并且它将打印出一个缩进的树, 告诉您该函数花了父函数时间的百分比 (以及主体函数与其他函数调用的时间) 。
例如,如果main调用了function_1和function_2,先function_2调用function_3,然后调用main调用function_3:
function_1和function_2
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
但是,与优雅的调用树相比,这非常混乱。如果 您可以轻松做到这一点,请告诉我,这会有所帮助。
在此库http://pycallgraph.slowchop.com/中查看调用图。它 真的很好。如果要分析特定功能,请查看 http://mg.pov.lt/blog/profiling.html
这是来自profilehooks模块的结果。