我正在使用 cProfile 和以下命令分析 python 脚本 main.py:

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 (4.674) 如何与 cumtimemain.py (13.598) 不同,因为这个函数(即整个脚本)只被调用一次?

最佳答案

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 秒。

documentation :

关于python - cProfile 输出上的 tottime 和 cumtime 有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40404007/

10-13 05:47