我正在使用cProfile使用以下命令分析python脚本python -m cProfile -s tottime main.py
:
10184337 function calls (10181667 primitive calls) in 13.597 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1 4.674 4.674 13.598 13.598 main.py:2(<module>)
2142 2.964 0.001 4.663 0.002 load_aerdat3.py:61(getPacket)
459 2.381 0.005 2.381 0.005 {waitKey}
1667989 1.170 0.000 1.170 0.000 {numpy.core.multiarray.array}
...
我得到的输出是(只复制粘贴输出的顶行):
tottime
cumtime
(4.674)如何与main.py
的{{1}}(13.598)不同,因为这个函数(即整个脚本)只被调用一次?
答案 0 :(得分:64)
tottime
是在单独的功能中花费的总时间。 cumtime
是函数加上此函数调用的所有函数所花费的总时间。
如果函数从不调用其他任何东西,那么这两个值将是相同的。例如,{waitKey}
似乎不会调用任何其他内容:
459 2.381 0.005 2.381 0.005 {waitKey}
但getPacket()
会调用其他功能,因此它的cumtime
列包含这些调用的时间:
2142 2.964 0.001 4.663 0.002 load_aerdat3.py:61(getPacket)
main.py
行涵盖了在函数之外运行的所有代码,即全局代码;只是该级别的语句运行时间为4.674秒,但由于这些语句称为其他函数,因此main.py
代码的总累计时间加上所有函数调用为13.598秒。
tottime
在给定函数中花费的总时间(并且不包括调用子函数的时间)[...]
cumtime
是在这个和所有子功能(从调用到退出)中花费的累积时间。即使对于递归函数,这个数字也是准确的。