2013/07/22

ライブラリ:timeit

Pythonの「timeit」というライブラリについてご紹介します。

import timeit

「timeit」は実行時間を計測するためのライブラリです。

スクリプト内で使うこともコマンドラインからも使うこともできます。以下、順に見ていきます。

スクリプト内で

import timeit

# Timerインスタンスを生成
# Timer(時間を計測したい処理, 前処理)
t = timeit.Timer("math.sin(10)", "import math")

# 時間を実際に計測
print t.timeit() # 0.45...など
時間を計測するには、Timerクラスのインスタンスを生成した後timeit()メソッドを実行すれば行うことができます。

Timerクラスを生成するときは、「時間を計測したい処理」と、その最初に実行したい「前処理」を与えます。デフォルトでは100万回実行されたときの合計時間が返ってきます。

時間の単位は現実世界の秒やマイクロ秒(wall clock time)などで、CPU時間(CPU time)ではありません。

print t.timeit(1000)
timeit()に整数を渡すと、実行回数を変更することもできます。この場合は1000回の繰り返しとなります。

print min(t.repeat(5))
repeat()は、timeitによる計測をn回連続で行い、結果を長さnのリストに格納して返してくれます。この場合は長さ5のリストが返ってきます。

timeit()が返す数値は他の実行中のプロセスなどによって変わったりもするため、複数回試した場合は、その平均値よりも最小値(min)を見ておくのがよいそうです。

the min() of the result is probably the only number you should be interested in.

つづいて、コマンドライン上での使い方について。

コマンドラインから

$python -m timeit "[str(x) for x in range(100)]"
10000 loops, best of 3: 63.7 usec per loop
コマンドラインから使う場合は、「python -m timeit」のあとにオプションをつけて使います。デフォルトでは、3回実行したうちの最小の時間が帰ってきます。

python -m timeit -n 10 -r 5 -s "import math" "[math.sin(x) for x in range(1000)]"
オプション「n」で1試行あたりの実行回数、「r」で試行回数、「s」で前処理を指定することができます。この場合であれば、処理を10回連続で実行したときの時間を5回計測し、そのうちの最短の時間を返してくれます。

ほかにもオプションがありますので、詳しくは公式ドキュメントをご参照ください。

以上です。


参考
timeit - Python公式ドキュメント
How to use timeit correctly - stackverflow
timeit – 小さな Python コードの実行時間を計る - Python Module of the Week

0 件のコメント: