よく見るのは time.time()
を使った方法だと思うので、精度などこだわりがなければこの方法で問題はないと思います。
time.time()
time.time()
を使うと1970年1月1日0時0分0秒からの秒数であるUnix時間というものを取得できます。
プログラムの実行前と実行後でUnix時間を取得し、差を見ることで実行にかかった秒数を得ることができるのです。
import time
start_time = time.time()
time.sleep(3)
end_time = time.time()
print(end_time - start_time)
# 3.0032896995544434
秒数を 分と秒 に変換するには以下のような関数を作ってやればOKです。
def sec_to_min_sec(t):
min = int(t / 60)
sec = int(t - min*60)
return min, sec
start_time = time.time()
time.sleep(140)
end_time = time.time()
min, sec = sec_to_min_sec(end_time - start_time)
print(f'min:{min} sec:{sec}')
# min:2 sec:20
time.process_time()
現在のプロセスのシステムCPU時間とユーザーCPU時間の合計値を(小数秒単位で)返します。スリープ中の経過時間は含まれません。定義上、プロセス全体の時間です。返された値の基準点は未定義であり、2回の呼び出しの結果の差のみが有効である。
https://docs.python.org/ja/3/library/time.html#time.process_time
import time
def fibonacci(x):
if x==1 or x==2:
return 1
else:
return fibonacci(x-1) + fibonacci(x-2)
start_time = time.process_time()
fibonacci(35)
end_time = time.process_time()
print(end_time - start_time)
# 2.9565654310000014
sleepは計測に含まれません。
start_time = time.process_time()
time.sleep(3)
end_time = time.process_time()
print(end_time - start_time)
# 0.013808198999999632
time.perf_counter()
パフォーマンスカウンタの値(分数秒)を返します。パフォーマンスカウンタとは、短い時間を測定するために利用可能な最高の解像度を持つクロックのことです。この値にはスリープ中の経過時間が含まれ、システム全体に適用されます。返される値の基準点は未定義で、2回の呼び出しの結果の差だけが有効となります。
https://docs.python.org/ja/3/library/time.html#time.perf_counter
import time
start_time = time.perf_counter()
time.sleep(3)
end_time = time.perf_counter()
print(end_time - start_time)
# 3.003301611000097
time process_time perf_counter の違い
この記事を書く際に色々調べたけど、違いがよくわからなかったので少しまとめてみました。
間違えていたら教えてください。
関数 | 絶対 or 相対 | time.sleepも計測 |
---|---|---|
time | 絶対 | ○ |
process_time | 相対 | × |
perf_counter | 相対 | ○ |
特に精度などのこだわりがなければ time.time()
で問題ないと思います。

Jupyter Notebookで時間計測 (Jupyterならこれが便利)
Jupyter Notebookで時間計測するにはマジックコマンドが使えます。
ここでは簡単に使い方を紹介するだけにしておきますが、もっと詳しく知りたい方はこちらの記事をご覧ください。
セルの実行時間を計測
セルの実行時間を計測したいならセルの最初に %%time
を書けばOK
セルの最初に書かないとエラーが出るので注意
%%time
import time
time.sleep(1)
time.sleep(2)
time.sleep(3)
# CPU times: user 20.6 ms, sys: 3.03 ms, total: 23.6 ms
# Wall time: 6 s
1行のコードだけ実行時間を計測
セルのコード全てではなく、ある1行だけ計測したい時にわざわざセルを分けるのも面倒なので、そういう時は %time
を使いましょう。
以下のようにして使います。
%time 計測対象コード
def fibonacci(x):
if x==1 or x==2:
return 1
else:
return fibonacci(x-1) + fibonacci(x-2)
%time fibonacci(35)
# CPU times: user 2.99 s, sys: 3 ms, total: 2.99 s
# Wall time: 3.01 s
コメント