傀儡師の館.Python

傀儡師の館.Python

PR

Calendar

Keyword Search

▼キーワード検索

Archives

2024.09
2024.08
2024.07
2024.06
2024.05

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2008.01.01
XML
カテゴリ: Python
Python Google Chart の作者が公開している Python Call Graph を使ってみる。呼び出し関係、呼び出し回数と実行時間がグラフで表示されるので、いいかもしれない。大きいグラフになったときにどのようなビューアで見るかというところがポイントかもしれない。何か見やすいツールはないかなぁ。

インストールは easy_install pycallgraph で OK。使い方は、下の通り。


または
pycallgraph-dot.py mypythonapp.py graph.png

上記を実行すると、mypythonapp.py を実行してコールグラフを graph.png に出力してくれる。グラフの生成は Graphviz を使っている。pydot などと同じように dot ファイルを書き出して、Graphviz の dot コマンドを呼び出してグラフを生成している。pycallgraph-dot.py を引数なしで実行するか、--help を付けて実行するとオプションが表示される。

Python Call Graph 0.4.0 も参照。

コマンドラインから実行する以外に、プログラム中でモジュールを読み込んでトレースを仕掛けて、結果の画像を出力することも可能。下のように do something のところにコードを入れておけば、test.png が生成される。


if __name__ == '__main__':

import pycallgraph
pycallgraph.start_trace()

# do something

pycallgraph.make_dot_graph('test.png')

start_trace には次のコードがある。邪魔な関数は filter_func を指定してやれば削除することができるし、time_filter_func で時間にカウントしない関数をフィルタすることができる。詳細については、ソースコード参照。デフォルトでは、['pycallgraph.*'] のみ対象外となる。

if filter_func:
trace_filter = filter_func
else:
trace_filter = GlobbingFilter(exclude=['pycallgraph.*'])

if time_filter_func:
time_filter = time_filter_func
else:
time_filter = GlobbingFilter()

ちなみに、トレースする分、実行速度は通常より遅くなる(当然といえば、当然)。細かくみるなら Python プロファイラ を使った方がいいが、Python Call Graph は視覚的に分かりやすい。けれどもノードがたくさんある大きい、グラフはよいビューアがないと見るのが大変。

Python Call Graph のページを参照。


アクセス解析






お気に入りの記事を「いいね!」で応援しよう

Last updated  2008.01.02 04:34:08 コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: