プログラムの実行時間を計測する方法
timeモジュールを利用する方法
timeモジュールをインポートして「time.time()」により時刻が取得できるので、その差分から所要時間を求められる。「time.time()」により取得した値はfloat型なので減算が可能である。
ここでは例として100項目までのフィボナッチ数からなるリストの作成に要する時間を計測してみる。
import time start = time.time() num = [1,1] for i in range(98): tmp = num[i+1] + num[i] num.append(tmp) print(i+3, tmp) print(num) elapsed_time = time.time() - start print ("elapsed_time: {0}".format(elapsed_time) + " [sec]")
結果は以下のようになる。
3 2 4 3 5 5 ... (略) ... 98 135301852344706746049 99 218922995834555169026 100 354224848179261915075 [1, 1, 2, 3, 5, 8, 13, ...(略) elapsed_time: 0.0020024776458740234 [sec]
なお、この方法で取得しているのはあくまでも時刻なので、期待する精度の高さによっては満足な時間解像度が得られない場合がある。time.time()の代わりに「time.perf_counter()」を用いることにより、プログラムが動いてから現実時間がどの程度経過したかを計測することができる。
timeモジュールで使える関数は以下の通り。
name | purpose | description | sleep |
---|---|---|---|
perf_counter() |
実時間の計測 | パフォーマンスカウンターの値 | 含める |
process_time() |
プロセスにおいて実際に稼働した時間の計測 | 現在のプロセスのシステムおよびユーザーの CPU 時間の合計値 | 含めない |
thread_time() |
スレッドにおいて実際に稼働した時間の計測 | 現在のスレッドのシステムおよびユーザーの CPU 時間の合計値 | 含めない |
monotonic() |
システム時刻の経過時間の計測 | システムを起動した後の経過時間 | 含める |
(出典:Python 実行時間計測メモ)
perf_counter関数もtime関数と同様の形式で利用できる。
ナノ秒単位で時間を計測する
timeモジュールには、ナノ秒単位で時間を計測するperf_counter_ns関数というのも実装されている。使い方は同じ。
import time # import datetime start = time.perf_counter_ns() num = [1,1] for i in range(98): tmp = num[i+1] + num[i] num.append(tmp) print(i+3, tmp) print(num) end = time.perf_counter_ns() elapsed_time = end - start print ("elapsed_time: {0}".format(elapsed_time) + " [ns]")