2008年9月22日月曜日

Python でアバウトな時間計測

1. 日付と時間を持つ datetime オブジェクトで時間の計測

特定の処理にかかる時間を計測したい。

6.10.4 datetime オブジェクト によると、

datetime オブジェクトは date オブジェクトおよび time オブジェクトの全ての情報が入っている単一のオブジェクトです。(…)

now([tz])

現在のローカルな日付および時刻を返します。オプションの引数 tzNone であるか指定されていない場合、このメソッドは today() と同様ですが、可能ならば time.time() タイムスタンプを通じて得ることができるより高い精度で時刻を提供します (例えば、プラットフォームが C 関数 gettimeofday() をサポートする場合には可能なことがあります)。

試してみる。

from datetime import datetime
from time import sleep

start = datetime.now()
print start

sleep(1)

end = datetime.now()
print end
print end -start

結果は、

2008-09-22 09:53:44.375000
2008-09-22 09:53:45.375000
0:00:01

 

2. time 関数で時間を計測

6.11 time -- 時刻データへのアクセスと変換 によると、

ほとんどの関数が利用可能ですが、全ての関数が全てのプラットフォームで利用可能なわけではありません。このモジュールで定義されているほとんどの関数は、プラットフォーム上の同名の C ライブラリ関数を呼び出します。(…)

time()

時刻を浮動小数点数で返します。単位は UTC におけるエポックからの秒数です。時刻は常に浮動小数点で返されますが、全てのシステムが 1 秒より高い精度で時刻を提供するとは限らないので注意してください。

試してみる。

from time import time
start = time()
print start

sleep(1)

end = time()
print end
print end - start

結果は、

1222044825.38
1222044826.38
1.0

 

3. その他

追記(2008.9.22) : より正確な時間を計測するには、timeit モジュールを利用する。

18.2. Using the timeit Module には

「The most important thing you need to know about optimizing Python code is that you shouldn't write your own timing function.」

とあることに注意。 (via 実行時間計測の基本)

Python でメソッドの実行時間の計測 につづく…