25.6 キャリブレーション(補正)

profile のプロファイラは time 関数呼出しおよびその値を保存する ためのオーバーヘッドを補正するために、各イベントハンドリング時間から定 数を引きます。デフォルトでこの定数の値は 0 です。以下の手順で、プラット フォームに合った、より適切な定数が得られます(前節「制限事項」の説明を参 照)。

import profile
pr = profile.Profile()
for i in range(5):
    print pr.calibrate(10000)

メソッドは引数として与えられた数だけ Python の呼出しをおこないます。呼 出しは直接、プロファイラを使って呼出しの両方が実施され、それぞれの時間 が計測されます。その結果、プロファイラのイベントに隠されたオーバーヘッ ドが計算され、その値は浮動小数として返されます。たとえば、800 MHz の Pentium で Windows 2000 を使用、Python の time.clock() をタイマとして 使った場合、値はおよそ 12.5e-6 となります。

この手順で使用しているオブジェクトはほぼ一定の結果を返します。非 常に早いコンピュータを使う場合、もしくはタイマの性能が貧弱な場合は一 定の結果を得るために引数に 100000 や 1000000 といった大きな値を指定す る必要があるかもしれません。

一定の結果が得られたら、それを使う方法には3通りあります。25.2

import profile

# 1. 算出した補正値 (your_computed_bias) をこれ以降生成する
#    Profile インスタンスに適用する。
profile.Profile.bias = your_computed_bias

# 2. 特定の Profile インスタンスに補正値を適用する。
pr = profile.Profile()
pr.bias = your_computed_bias

# 3. インスタンスのコンストラクタに補正値を指定する。
pr = profile.Profile(bias=your_computed_bias)

方法を選択したら、補正値は小さめに設定した方が良いでしょう。プロファイ ルの結果に負の値が表われる``確率が少なく''なるはずです。



脚注

...一定の結果が得られたら、それを使う方法には3通りあります。25.2
Python 2.2 より前のバージョンではプロファイラのソースコードに補正値と して埋め込まれた定数を直接編集する必要がありました。今でも同じことは可 能ですが、その方法は説明しません。なぜなら、もうソースを編集する必要が ないからです。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。