プロジェクト オイラー他のコーディング コンテストでは、実行時間の上限が設けられていたり、特定のソリューションの実行速度を自慢する人がいたりすることがよくあります。Python では、タイミング コードを追加するなど、アプローチが少々場違いになることがあります__main__
。
Python プログラムの実行にかかる時間をプロファイリングする良い方法は何ですか?
ベストアンサー1
Pythonにはプロファイラが含まれていますcProfile
合計実行時間だけでなく、各関数の時間を個別に計測し、各関数が何回呼び出されたかを示すため、最適化を行う必要がある場所を簡単に判断できます。
次のように、コード内から、またはインタープリターから呼び出すことができます。
import cProfile
cProfile.run('foo()')
さらに便利なのは、スクリプトを実行するときに cProfile を呼び出すことができることです。
python -m cProfile myscript.py
またはモジュールを実行する場合:
python -m cProfile -m mymodule
さらに簡単にするために、「profile.bat」という小さなバッチ ファイルを作成しました。
python -m cProfile %1
つまり、私がしなければならないのは、以下を実行することだけです:
profile euler048.py
そして私はこれを得ました:
1007 function calls in 0.061 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.061 0.061 <string>:1(<module>)
1000 0.051 0.000 0.051 0.000 euler048.py:2(<lambda>)
1 0.005 0.005 0.061 0.061 euler048.py:2(<module>)
1 0.000 0.000 0.061 0.061 {execfile}
1 0.002 0.002 0.053 0.053 {map}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler objects}
1 0.000 0.000 0.000 0.000 {range}
1 0.003 0.003 0.003 0.003 {sum}
編集:PyCon 2013の優れたビデオリソースへのリンクを更新しました。Python プロファイリング
YouTubeでも。