何が凄いって、Pythonでかかれたスクリプトの実行時間を、メソッドごとに計測し、グラフィカルに表示してくれるのだ。
試しに使ってみたが、これは素晴らしかった。
#vim encoding=utf8
def loop(x):
for i in range(x):
print "やっほー"
def loop_list(x):
yahho = []
for i in range(x):
yahho.append("やっほー")
yahhoi = loop_list(1000)
loop(1000)
上記のスクリプトを実行し、プロファイルしてみたのが以下
loopが時間を食っていること、更に、loop_list内で実行されているappend()の実行にどれだけ時間を食っているかも分かるのだ。
ちなみにこれ、モジュール内で更に関数を実行していた場合、再帰的に実行時間を計測出来る。
例えば、関数内でurllibのurlopenを実行していた場合、urlopen内で実行されているsocketオブジェクトのメソッドであるconnect_ofの実行時間を計測出来たりもする。
更に深いところになるとまた違う手法を求められるのであろうが(筆者にその知識はない)、しかし、手掛かりを簡単に掴めるというだけでも、使ってみる価値はあるのではなかろうか。
では、インストール方法の説明である。
コンソールに行き、
sudo
apt-get
install
python-profiler python-wxgtk2.8 python-setuptools
sudo
easy_install SquareMap RunSnakeRun
たったこれだけだ。
プロファイルの作成方法であるが、
python -m cProfile -o outputfilename pythonscript script_arguments
こちらのフォーマットに従ってくれれば問題ない。
筆者の行った例で言えば、計測したいスクリプト名が「test.py」、出力したいプロファイル名が「output」であったから、
python -m cProfile -o output test.py
と、した。
プロファイルを見る場合は、
runsnake output
とすればよい。
日頃行っているサービスのパフォーマンス改善は勿論のこと、競技プログラミングで手詰まりを起こした際にも役立つ場面がある(?)のではなかろうか。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。