私はpython script main.py
を次のコマンドでcProfileを使用してプロファイリングしています:
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)は、main.py
のcumtime
(13.598)とどのように異なることができますか?この関数(つまり、スクリプト全体)は1回しか呼び出されないためです。
tottime
は関数のみで費やされた合計時間です。 cumtime
は、関数で費やされた合計時間plusこの関数が呼び出したすべての関数です。
関数が他に何も呼び出さない場合、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秒。
ドキュメント から:
tottime
指定された関数で費やされた合計時間(およびサブ関数の呼び出しで行われた時間を除く)[...]
cumtime
は、このサブ関数およびすべてのサブ関数(呼び出しから終了まで)で費やされた累積時間です。この数値は、再帰関数に対しても正確です。