26.5. hotshot
— ハイパフォーマンス・ロギング・プロファイラ¶(原文)
バージョン 2.2 で追加.
このモジュールは _hotshot
C モジュールへのより良いインターフェースを提供します。Hotshot は既存の profile
に置き換わるものです。その大半が C で書かれているため、 profile
に比べパフォーマンス上の影響がはるかに少なく済みます。
注釈
hotshot
は C モジュールでプロファイル中のオーバーヘッドを極力小さくすることに焦点を絞っており、その代わりに後処理時間の長さというつけを払います。通常の使用法についてはこのモジュールではなく cProfile
を使うことを推奨します。 hotshot
は保守されておらず、将来的には標準ライブラリから外されるかもしれません。
バージョン 2.5 で変更: 以前より意味のある結果が得られているはずです。かつては時間計測の中核部分に致命的なバグがありました.
注釈
hotshot
プロファイラはまだスレッド環境ではうまく動作しません。測定したいコード上でプロファイラを実行するためにスレッドを使わない版のスクリプトを使う方法が有用です。
-
class
hotshot.
Profile
(logfile[, lineevents[, linetimings]])¶(原文) プロファイラ・オブジェクト。引数 logfile はプロファイル・データのログを保存するファイル名です。引数 lineevents はソースコードの1 行ごとにイベントを発生させるか、関数の呼び出し/リターンのときだけ発生させるかを指定します。デフォルトの値は
0
(関数の呼び出し/ リターンのときだけログを残す) です。引数 linetimings は時間情報を記録するかどうかを指定します。デフォルトの値は1
(時間情報を記録する) です。
26.5.1. Profile オブジェクト¶(原文)
Profile オブジェクトには以下のメソッドがあります:
-
Profile.
run
(cmd)¶(原文) スクリプト環境で
exec
互換文字列のプロファイルをおこないます。__main__
モジュールのグローバル変数は、スクリプトのグローバル変数、ローカル変数の両方に使われます。
-
Profile.
runcall
(func, *args, **keywords)¶(原文) 単一の呼び出し可能オブジェクトのプロファイルをおこないます。位置依存引数やキーワード引数を追加して呼び出すオブジェクトに渡すこともできます。呼び出しの結果はそのまま返されます。例外が発生したときはプロファイリングが無効になり、例外をそのまま伝えるようになっています。
26.5.2. hotshot データの利用¶(原文)
バージョン 2.2 で追加.
このモジュールは hotshot プロファイル・データを標準の pstats
Stats オブジェクトにロードします。
-
hotshot.stats.
load
(filename)¶(原文) filename から hotshot データを読み込み、
pstats.Stats
クラスのインスタンスを返します。
26.5.3. 使用例¶(原文)
これは Python の "ベンチマーク" pystone を使った例です。実行にはやや時間がかかり、巨大な出力ファイルを生成するので注意してください。
>>> 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)
.
.
.