profile モジュールおよび cProfile モジュールの Profile クラスはプロファイラの機 能を拡張するため、派生クラスの作成を前提に書かれています。しかしその方 法を説明するには、Profile の内部動作について詳細な解説が必要と なるため、ここでは述べません。もし拡張をおこないたいのであれば、 使用するモジュールのソースを注意深く読む必要があります。
プロファイラが時刻を取得する方法を変更したいだけなら(たとえば、通常の 時間(wall-clock)を使いたいとか、プロセスの経過時間を使いたい場合)、時 刻取得用の関数を Profile クラスのコンストラクタに指定すること ができます。
pr = profile.Profile(your_time_func)
この結果生成されるプロファイラは時刻取得に your_time_func() を 呼び出すようになります。
選択する時刻取得関数によって、プロファイラクラスを補正する必要があるこ とに注意してください。多くのマシンにおいて、プロファイル時のオーバヘッ ドを少なくする方法として、タイマはロング整数を返すのが最善です。 os.times() は浮動小数のタプルを返すので おすすめできま せん)。タイマをより正確なものに置き換えたいならば、派生クラスでそのディ スパッチ・メソッドを適切なタイマ呼出しと適切な補正をおこなうように書き 直す必要があります。
pr = profile.Profile(your_integer_time_func, 0.001)
cProfile.Profile クラスはキャリブレーションができないので、 自前のタイマ関数は注意を払って使う必要があり、またそれは可能な限り 速くなければなりません。自前のタイマ関数で最高の結果を得るには、 _lsprof 内部モジュールの C ソースファイルにハードコードする 必要があるかもしれません。