#
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` を使って実装)とヘルプ機能を 備えています。