【Python】プログラムの実行時間を計測する方法

PythonのTopに戻る


 

 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]")

PythonのTopに戻る