26.5. hotshot —高性能ロギングプロファイラー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/hotshot
移動先:案内検索

26.5。 やり手 —高性能ロギングプロファイラー

バージョン2.2の新機能。


このモジュールは、_hotshot Cモジュールへのより優れたインターフェースを提供します。 Hotshotは、既存の profile モジュールの代替品です。 ほとんどがCで記述されているため、既存の profile モジュールよりもパフォーマンスへの影響ははるかに小さいはずです。

ノート

hotshot モジュールは、プロファイリング中のオーバーヘッドを最小限に抑えることに重点を置いていますが、データの後処理時間が長くなります。 一般的な使用法では、代わりに cProfile を使用することをお勧めします。 hotshot は維持されておらず、将来的に標準ライブラリから削除される可能性があります。


バージョン2.5で変更:結果は以前よりも意味のあるものになるはずです。タイミングコアに重大なバグが含まれていました。


ノート

hotshot プロファイラーはまだスレッドではうまく機能しません。 可能であれば、スレッド化されていないスクリプトを使用して、測定したいコードに対してプロファイラーを実行すると便利です。


class hotshot.Profile(logfile[, lineevents[, linetimings]])
プロファイラーオブジェクト。 引数 logfile は、ログに記録されたプロファイルデータに使用するログファイルの名前です。 引数 lineevents は、すべてのソース行に対してイベントを生成するか、関数の呼び出し/戻り時にのみ生成するかを指定します。 デフォルトは0です(ログ関数の呼び出し/戻りのみ)。 引数 linetimings は、タイミング情報を記録するかどうかを指定します。 デフォルトは1(タイミング情報を保存)です。

26.5.1。 プロファイルオブジェクト

プロファイルオブジェクトには、次のメソッドがあります。

Profile.addinfo(key, value)
プロファイル出力に任意のラベル付き値を追加します。
Profile.close()
ログファイルを閉じて、プロファイラーを終了します。
Profile.fileno()
プロファイラーのログファイルのファイル記述子を返します。
Profile.run(cmd)
スクリプト環境で exec 互換の文字列をプロファイリングします。 __ main __ モジュールのグローバルは、スクリプトのグローバルとローカルの両方として使用されます。
Profile.runcall(func, *args, **keywords)
呼び出し可能オブジェクトの単一の呼び出しをプロファイルします。 追加の位置引数とキーワード引数を渡すことができます。 呼び出しの結果が返され、プロファイリングが途中で無効になっていることを確認しながら、例外をクリーンに伝播できます。
Profile.runctx(cmd, globals, locals)
特定の環境で exec 互換の文字列を評価します。 文字列は、プロファイリングが開始される前にコンパイルされます。
Profile.start()
プロファイラーを起動します。
Profile.stop()
プロファイラーを停止します。


26.5.2。 ホットショットデータの使用

バージョン2.2の新機能。


このモジュールは、ホットショットプロファイリングデータを標準の pstats Statsオブジェクトにロードします。

hotshot.stats.load(filename)
ファイル名からホットショットデータをロードします。 pstats.Stats クラスのインスタンスを返します。

も参照してください

モジュールプロファイル
プロファイルモジュールのStatsクラス


26.5.3。 使用例

この例では、Pythonの「ベンチマーク」パイストーンを実行していることに注意してください。 実行には時間がかかる場合があり、大きな出力ファイルが生成されます。

>>> import hotshot, hotshot.stats, test.pystone
>>> prof = hotshot.Profile("stones.prof")
>>> benchtime, stones = prof.runcall(test.pystone.pystones)
>>> prof.close()
>>> stats = hotshot.stats.load("stones.prof")
>>> stats.strip_dirs()
>>> stats.sort_stats('time', 'calls')
>>> stats.print_stats(20)
         850004 function calls in 10.090 CPU seconds

   Ordered by: internal time, call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    3.295    3.295   10.090   10.090 pystone.py:79(Proc0)
   150000    1.315    0.000    1.315    0.000 pystone.py:203(Proc7)
    50000    1.313    0.000    1.463    0.000 pystone.py:229(Func2)
 .
 .
 .