使用KchacheGrind分析的cProfile输出中<cycle 5 =“”>函数的含义是什么?

时间:2017-06-08 08:21:21

标签: python profiling cprofile kcachegrind

我想分析python代码的性能,我已经使用了cProfile模块并生成了python documentation中提到的.cprof文件。我正在使用 pyprof2calltree python模块将.cprof文件打开到 KCacheGrind Screen Shot of KCacheGrind Tool。我已经放了分析结果的屏幕截图,它显示名为第5周期的函数占用CPU时间的100.04%。我不能说这是什么意思。它也没有显示此功能的任何源代码。

1 个答案:

答案 0 :(得分:4)

  

它显示名为cycle 5的函数占用CPU时间的100.04%。

不,它表明某些“循环5”和从它调用的所有函数以及从它们调用的所有函数都使用100%“包含”时间。

<cycle>不是真正的函数,而是kcachegrind heuristically tries to get recursion information from the profiling format(“循环内部调用的包含成本无意义”)。 This format (defined for callgrind)没有函数调用序列的确切信息(f1调用f2调用f3 ...),只存储调用者 - 被调用者对。此格式仅适用于“自我”时间,但在递归时不适用于“包含”(包括所有被调用者时间)。

KCachegrind允许(并建议)您使用View Menu关闭“执行周期检测”:https://kcachegrind.github.io/html/NewsOld.html

  

循环检测可通过工具栏按钮切换。对于GUI应用程序,有时关闭循环检测很有用,即使递归调用存在一些可视化错误。

如果没有循环检测,将不会生成合成<cycle>函数,但某些函数可能具有> 100%“包含”。时间。尝试使用“自我”时间,或使用更好格式的分析工具(linux perfoperfocperf.py; google的cpuprofile和其他使用具有完整函数调用堆栈的分析格式)。 https://github.com/jrfonseca/gprof2dot列出了许多好的格式,它也可以正确地显示它们(如果有足够的信息)。尝试使用python配置文件格式:

  

python个人资料

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

python cProfile(以前称为lsprof)

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

python hotshot profiler

     

hotshot profiler不包含主要功能。请改用hotshotmain.py脚本。

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