10.5.1 Stats クラス

Stats には次のメソッドがあります。

strip_dirs( )

このメソッドは Stats にファイル名の前に付いているすべてのパス 情報を取り除かせるためのものです。出力の幅を80文字以内に収めたいときに 重宝します。このメソッドはオブジェクトを変更するため、取り除いたパス情 報は失われます。パス情報除去の操作後、オブジェクトが保持するデータエント リは、オブジェクトの初期化、ロード直後と同じように``ランダムに''並んで います。strip_dirs() を実行した結果、2つの関数名が区別できな い(両者が同じファイルの同じ行番号で同じ関数名となった)場合、一つのエン トリに合算されされます。

add( filename[, ...])

Stats クラスのこのメソッドは、既存のプロファイリング・オブジェ クトに情報を追加します。引数は対応するバージョンの profile.run() によって生成されたファイルの名前でなくてはな りません。関数の名前が区別できない(ファイル名、行番号、関数名が同じ)場 合、一つの関数の統計情報として合算されます。

dump_stats( filename)
Stats オブジェクトに読み込まれたデータを、ファイル名 filename のファイルに保存します。ファイルが存在しない場合 新たに作成され、すでに存在する場合には上書きされます。 このメソッドは profile.Profile クラスの同名のメソッドと 等価です。 バージョン 2.3 で 新たに追加 された仕様です。

sort_stats( key[, ...])

このメソッドは Stats オブジェクトを指定した基準に従ってソート します。引数には通常ソートのキーにしたい項目を示す文字列を指定します (例: 'time''name' など)。

2つ以上のキーが指定された場合、2つ目以降のキーは、それ以前のキーで同等 となったデータエントリの再ソートに使われます。たとえば sort_stats('name', 'file') とした場合、まずすべてのエントリが関 数名でソートされた後、同じ関数名で複数のエントリがあればファイル名でソー トされるのです。

キー名には他のキーと判別可能である限り綴りを省略して名前を指定できます。 現バージョンで定義されているキー名は以下の通りです。

正式名 内容
'calls' 呼び出し回数
'cumulative' 合計時間
'file' ファイル名
'module' モジュール名
'pcalls' プリミティブな呼び出しの回数
'line' 行番号
'name' 関数名
'nfl' 関数名/ファイル名/行番号
'stdname' 標準名
'time' 内部時間

すべての統計情報のソート結果は降順(最も多く時間を消費したものが一番上 に来る)となることに注意してください。ただし、関数名、ファイル名、行数 に関しては昇順(アルファベット順)になります。'nfl''stdname' はやや異なる点があります。標準名(standard name)とは表 示欄の名前なのですが、埋め込まれた行番号の文字コード順でソートされます。 たとえば、(ファイル名が同じで)3、20、40という行番号のエントリがあった 場合、20、30、40 の順に表示されます。一方 'nfl' は行番号を数値 として比較します。結果的に、sort_stats('nfl')sort_stats('name', 'file', 'line') と指定した場合と同じになりま す。

旧バージョンのプロファイラとの互換性のため、数値を引数に使った -1012 の形式もサポートしています。 それぞれ 'stdname''calls''time''cumulative' として処理されます。引数をこの旧形式で指定した場合、 最初のキー(数値キー)だけが使われ、複数のキーを指定しても2番目以降は無 視されます。

reverse_order( )

Stats クラスのこのメソッドは、オブジェクト内の情報のリストを逆 順にソートします。これは旧プロファイラとの互換性のために用意されていま す。現在は選択したキーに応じて昇順、降順が適切に選ばれるため、このメソッ ドの必要性はほとんどないはずです。

print_stats( [restriction, ...])

Stats クラスのこのメソッドは、profile.run() の項で 述べた プロファイルのレポートを出力します。

出力するデータの順序はオブジェクトに対し最後におこなった sort_stats() による操作にもとづいたものになります (add()strip_dirs() による制限にも支配されます)。

引数は一覧に大きな制限を加えることになります。初期段階でリストはプロファ イルした関数の完全な情報を持っています。制限の指定は(行数を指定する)整 数、(行のパーセンテージを指定する) 0.0 から 1.0 までの割合を指定する小 数、(出力する standard name にマッチする)正規表現のいずれかを使ってお こないます。正規表現は Python 1.5b1 で導入された re モジュー ルで使える Perl スタイルのものです。複数の制限は指定された場合、それは 指定の順に適用されます。たとえば次のようになります。

print_stats(.1, 'foo:')

上記の場合まず出力するリストは全体の10%に制限され、さらにファイル名の 一部に文字列 .*foo: を持つ関数だけが出力されます。

print_stats('foo:', .1)

こちらの例の場合、リストはまずファイル名に .*foo: を持つ関数だ けに制限され、その中の最初の 10% だけが出力されます。

print_callers( [restriction, ...])

Stats クラスのこのメソッドは、プロファイルのデータベースの中か ら何らかの関数呼び出しをおこなった関数すべてを出力します。出力の順序は print_stats() によって与えられるものと同じです。出力を制限す る引数も同じです。呼出し側関数の後にパーレンで囲まれて表示される数値は 呼出しが何回おこなわれたかを示すものです。続いてパーレンなしで表示され る数値は、関数が消費した時間の合計です。

print_callees( [restriction, ...])

Stats クラスのこのメソッドは指定した関数から呼出された関数のリ ストを出力します。呼出し側、呼出される側の方向は逆ですが、引数と出力の 順序に関しては print_callers() と同じです。

ignore( )
リリース 1.5.1 で撤廃されました。 現バージョンの Python のPython では不要です。10.2



... では不要です。10.2
Python が None 以外の使われなかった結果を表示するときに使われ たもので、旧バージョンとの互換性のためだけに定義されています。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。