25.2 インスタント・ユーザ・マニュアル

この節は ``マニュアルなんか読みたくない人''のために書かれています。こ こではきわめて簡単な概要説明とアプリケーションのプロファイリングを手っ とり早くおこなう方法だけを解説します。

main エントリにある関数 foo() をプロファイルしたいとき、モ ジュールに次の内容を追加します。

import cProfile
cProfile.run('foo()')

(お使いのシステムで cProfile が使えないときは代わりに profile を使って下さい)

このように書くことで foo() を実行すると同時に一連の情報(プロ ファイル)が表示されます。この方法はインタプリタ上で作業をしている場合、 最も便利なやり方です。プロファイルの結果をファイルに残し、後で検証した いときは、run() の2番目の引数にファイル名を指定します。

import cProfile
cProfile.run('foo()', 'fooprof')

ファイル cProfile.py を使って、別のスクリプトをプロファ イルすることも可能です。次のように実行します。

python -m cProfile myscript.py

cProfile.py はオプションとしてコマンドライン引数を2つ受け取りま す。

cProfile.py [-o output_file] [-s sort_order]

-s は標準出力(つまり、 -o が与えられなかった 場合)にのみ有効です。 利用可能なソートの値は、 Stats のドキュメントをご覧ください。

プロファイル内容を確認するときは、pstats モジュールのメソッド を使用します。統計データの読み込みは次のようにします。

import pstats
p = pstats.Stats('fooprof')

Stats クラス(上記コードはこのクラスのインスタンスを生成するだ けの内容です)は p に読み込まれたデータを操作したり、表示するた めの各種メソッドを備えています。先に cProfile.run() を実行し たとき表示された内容と同じものは、3つのメソッド・コールにより実現でき ます。

p.strip_dirs().sort_stats(-1).print_stats()

最初のメソッドはモジュール名からファイル名の前に付いているパス部分を取 り除きます。2番目のメソッドはエントリをモジュール名/行番号/名前にもと づいてソートします 。3番目のメソッドで全ての統計情報を出力します。 次のようなソート・メソッドも使えます。

p.sort_stats('name')
p.print_stats()

最初の行ではリストを関数名でソートしています。2号目で情報を出力してい ます。さらに次の内容も試してください。

p.sort_stats('cumulative').print_stats(10)

このようにすると、関数が消費した累計時間でソートされ、さらにその上位10 件だけを表示します。どのアルゴリズムが時間を多く消費しているのか知りた いときは、この方法が役に立つはずです。

ループで多くの時間を消費している関数はどれか調べたいときは、次のように します。

p.sort_stats('time').print_stats(10)

上記は関数の実行で消費した時間でソートされ、上位10個の関数の情報が表示 されます。

次の内容も試してください。

p.sort_stats('file').print_stats('__init__')

このようにするとファイル名でソートされ、そのうちクラスの初期化メソッド (メソッド名 __init__)に関する統計情報だけが表示されます。

p.sort_stats('time', 'cum').print_stats(.5, 'init')

上記は情報を時間 (time) をプライマリ・キー、累計時間 (cumulative time) をセカンダリ・キーにしてソートした後でさらに条件を絞って統計情報を出力 します。 ".5" は上位 50% だけの選択を意味し、さらにその中から 文字列 init を含むものだけが表示されます。

どの関数がどの関数を呼び出しているのかを知りたければ、次のようにします (p は最後に実行したときの状態でソートされています)。

p.print_callers(.5, 'init')

このようにすると、各関数ごとの呼出し側関数の一覧が得られます。

さらに詳しい機能を知りたければマニュアルを読むか、次の関数の実行結果 から内容を推察してください。

p.print_callees()
p.add('fooprof')

スクリプトとして起動した場合、pstats モジュールはプロファイル のダンプを読み込み、分析するための統計ブラウザとして動きます。シンプル な行指向のインタフェース(cmd を使って実装)とヘルプ機能を 備えています。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。