pythonのベンチマーク用モジュールtimeitの使い方と落とし穴。

python標準搭載のベンチマークモジュール、timeit。 結構便利なんですよねー、これ。

たとえば、timeモジュールに含まれているsleep関数の実行にどのくらい時間がかかるか知りたいなら

>>> import timeit
>>> timeit.timeit(stmt='time.sleep(0.1)', setup='import time', number=1)  # 1回だけ実行してみる。
0.09972344867259153
>>> timeit.timeit(stmt='time.sleep(0.1)', setup='import time', number=100)  # 100回実行してみる。
10.05719352328316

こんな感じ。

1つ注意しなきゃならないのが、値の大きさ。100回試したら、100回分の時間が返ってきます。

つまり、一回の時間を知りたいなら試行回数で割らなきゃいけない。 ということに気付かずにあれーなんか遅いなーなんて試行錯誤してましたとさ。あーあ。

ちなみにコンソールからも使うことが出来て、

$ python -m timeit -n 1 -r 1 -s "import time" "time.sleep(0.1)"  # 1回
1 loops, best of 1: 101 msec per loop
$ python -m timeit -n 100 -r 1 -s "import time" "time.sleep(0.1)"  # 100回
100 loops, best of 1: 101 msec per loop
$ python -m timeit -n 1 -r 1 -s "import time" "time.sleep(2)"
1 loops, best of 1: 2 sec per loop

のようになります。

若干精度が低いけど、まあいいんじゃない?

参考: 良いもの。悪いもの。: Python: timeitモジュールを使ってお手軽に実行時間計測