5

cProfile、pstats、および Gprof2dot を使用して、かなり長い Python スクリプトのプロファイルを作成しています。

結果は、定義したオブジェクトのメソッドの呼び出しに最も時間が費やされていることを示しています。ただし、私が本当に望んでいるのは、その関数内のどの行番号が時間を食いつぶしているのかを正確に知ることです。

この追加情報を取得する方法はありますか?

(ちなみに、私はOSX Snow LeopardでPython 2.6を使用しています...)

4

3 に答える 3

3

Robert Kern によって書かれた Pythonのライン プロファイラーがあります。

于 2009-10-01T06:25:22.700 に答える
2

「食べ尽くされた」時間が 40% のような数値であるとします。次に、プログラムを中断するか、ランダムな時間に一時停止すると、40% の確率でプログラムが表示され、コール スタックに正確に表示されます。これを 10 回実行すると、4 つのサンプルで +/- が表示されます。

これは、なぜ機能するのかを示しています。 これは一例です。

于 2009-09-30T21:36:48.617 に答える
2

cProfile関数内の行番号を追跡しません。関数が定義された行番号のみを追跡します。

cProfileprofile(純粋な Python である) の動作を複製しようとします。実行中のデータを保存するためにprofile使用し、個々の Python ステートメントではなく、関数定義の行番号のみを保存します。pstatspstats

常に食べているものをより細かい粒度で把握する必要がある場合は、大きな関数をいくつかの小さな関数にリファクタリングする必要があります。

于 2009-09-30T21:42:54.193 に答える