大きなプロジェクトでは、非常に遅い(数秒から数分の実行時間)という機能に遭遇しました。この関数は多くのことを行い、非常に深いスタックトレースを持っています。この関数の実行には少数のクラスしか関与していませんが、長いランタイムがどこから来るのかはそれほど明白ではありません。Pythonで低速実行関数の原因を追跡します
私は関数のデバッグを開始し、コールなどをトレースして、traceパッケージがかなり役に立ちました。これにより、リストを繰り返しアセンブルするいくつかの関数を特定することができました。実際には、最初の実行後にリストを保存すると、実際には約3倍のスピードアップにつながります。
しかし、トレースパッケージで数メガバイトのテキストが生成され、私に疑わしいものが見つからないため、関数を最適化することはできません。
トレースのタイミングオプションを使用してランタイムの概要を知り、どの機能が遅いのかを確認することを考えましたが、データ量が大きすぎるため、各呼び出しの合計実行時間が表示されますが、これはトレースパッケージでサポートされていないようです。
さらに別の質問は、どのレベルで実行時間を取得したいかです。単一のステートメントが遅いのではなく、関数全体がかなり頻繁に呼び出されるか、データが保存されない場合はありません。 最終的にステートメントごとの平均実行時間にカウントを掛けたものが必要です。後者は、トレースパッケージによって生成することができます。
pdbとトレースの他に、他にもツールがありますか?
おお、私は本当にのpythonの全ドキュメントを読んでいる必要があります。私はこれがまさに私が探していたものだと思います! – reox
ようこそ。 ;-) –