或阿呆のブログ

巷では、武器商人@ダーツで通っていました。Python好き好きプログラマーです。芥川龍之介、太宰治が好きです。

bashのtimeコマンドとPythonのtimeit 実行時間を計測したい

スポンサードリンク

実行時間計測の古典的なやりかたは、処理の前後に時刻取得処理を入れて、その差分を出すことなんだけど、いちいちそんなのいれるの面倒。

bash timeコマンド

bashだとtimeコマンドってのがあって、コマンドの実行時間を計測出来る。

$time sleep 10

real	0m10.001s
user	0m0.000s
sys	0m0.000s

これは、10秒間sleepさせてその実行時間を出力している。イメージとしてはこんな感じで呼べたらうれしいなと思ったわけ。ひねくれたPython使いとしては、ぐぐったら負けかなと思って、ipythonでがちゃがちゃやってみた。

ptyhonのtime

んで、pythonでももしやと思って・・・。

In [1]: import time

In [2]: time.t
time.time      time.timezone  time.tzname    time.tzset     

In [2]: time.time()
Out[2]: 1360327695.240912

time.time()呼んだら変なの出てきた。

ドキュメント読む。

In [3]: print time.time().__doc__
float(x) -> floating point number

Convert a string or number to a floating point number, if possible.

違うっぽい・・・。

引数入れたらいけるんじゃない?と淡い期待。

In [4]: time.time(time.sleep(10))

感触的にはこれで、bashの"time sleep 10"と等価なんじゃないか?と勘違い野郎。

待つこと10秒

TypeError                                 Traceback (most recent call last)
<ipython-input-4-74c73b09751a> in <module>()
----> 1 time.time(time.sleep(10))

TypeError: time() takes no arguments (1 given)

だめだったorz

time違いだった

timeit

結局ぐぐったんだけど、time itってのがそれに当たるっぽい。
コードの書き方はちょっと面倒。bashの"time sleep 10"と等価なコードを書いて実行してみた。

In [1]: import time

In [2]: import timeit

In [3]: stmt = '''
   ...: time.sleep(10)
   ...: '''

In [4]: t = timeit.Timer(stmt,'')

In [5]: print t.timeit(1)
10.0005478859

面倒くせぇええ!!!
一応解説

  1. timeをインポート
  2. timeitをインポート
  3. stmtに計測したい処理を文字列で入れる。文字列でってのがすごい!さすがインタプリタ言語!!!
  4. timeit.Timerインスタンスをセット。stmtは必須だが、第二引数(setup)は空文字列でもいいみたい。
  5. 呼び出し回数を入れて呼び出す。

けっこう精度はいいみたいだね。少なくともms単位の精度。

何度も言うが、俺はこう書きたいんだ。

 time.time(time.sleep(10))

せめてこう

 time.time('time.sleep(10)')