2016-11-03 16 views
13

私は、次のコマンドでcProfileを使用してPythonスクリプトmain.pyをプロファイリングしています:cProfileでプロファイルされたpythonスクリプトのtottimeとcumtimeの違いは何ですか?

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)は(13.598)のmain.pyとは異なりますか?

答えて

15

tottimeは、機能だけでの合計時間であるです。 cumtimeは、この関数が呼び出すすべての関数の合計時間です。

関数が他の関数を呼び出すことがない場合、2つの値は同じになります。例えば、{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から

が与えられた関数で費やされた合計時間のためtottime
(サブ関数の呼び出しで行われた時間を除く)

[...]

cumtime
は、このおよびすべてのサブ機能で費やされた累積時間ですons(呼び出しから終了まで)。この数字は、再帰関数であっても正確です。

+0

偉大な、今私は理解する!何とか私は 'tottime'にサブ関数を含んでいないことを逃しました..ありがとう! – takahashi

関連する問題