1

django のユニットテストのプロファイルを作成しようとしています (テストが高速な場合は、より頻繁に実行します)。Python の組み込み cProfile プロファイラーで実行し、pstats ファイルを作成しました。

ただし、信号対雑音比は悪いです。リストされている関数が多すぎます。1 つのデータベース クエリを作成すると、非常に多くの django 内部関数が呼び出されます。これにより、何が起こっているのかわかりにくくなります。

とにかく、特定のディレクトリの外にあるすべての関数呼び出しを「ロールアップ」できますか?

たとえば、ディレクトリ外で python 関数を呼び出し、それから他の 5 つの関数 (すべてディレクトリ外) を呼び出した場合、それらすべてをロールアップする必要があるため、関数呼び出しは 1 つだけのように見え、累積を表示する必要があります。全体の時間。

これは明らかに、Django のプロファイリング (たとえば) を行いたい場合には悪いことですが、私はそうしたくありません。

pstats.Stats オブジェクトを見ましたが、このデータを変更する明確な方法がわかりません。

4

1 に答える 1

1

私はPythonの経験はほとんどありませんが、パフォーマンスの調整には多くの経験があるため、可能性は次のとおりです。

  1. プロファイリングを単体テストの一部として実行するのではなく、全体的な実行時間の測定のみを行います。これらがあまり変わらない場合は、問題ありません。

  2. 変更を検出した場合、または処理を高速化したい場合は、このメソッドを使用します。あなたが言うように、それははるかに高い「信号対雑音比」を持っています。

違いは、プロファイラーが何を見る必要があるかを理解できることを望んでいないことです。これはデバッガーのブレーク ポイントに似ており、選択した場所ではなく、不必要な速度低下が発生したときに高い確率でブレークが発生します。より良いものに置き換えられる可能性のあることを 2 回以上実行している場合、平均して報われ、それを修正すると、同じ方法で他の問題を見つけやすくなります。

于 2012-11-02T19:54:06.657 に答える