処理時間の計測にはtime.time()ではなく、time.monotonic()またはtime.perf_counter()を使うとよい。
(せめて、time.monotonic()。)
理由
time.time()は、システムの日時変更の影響を受けるため、正確な時間計測には適していない。
time.time() ※いまいちな例
import time
start = time.time()
# 実行する処理
time.sleep(2)
end = time.time()
print(f"処理時間: {end - start} 秒")
上記のコードはシステムの日時が変更された場合、正確な計測ができない。
time.monotonic
time.monotonic()は単調増加するクロックの値を返す。このクロックはシステムの日時変更の影響を受けない。
import time
start = time.monotonic()
# 実行する処理
time.sleep(2)
end = time.monotonic()
print(f"処理時間: {end - start} 秒")
time.perf_counter
time.perf_counter()は高解像度のパフォーマンスカウンタの値を返す。これもシステムの日時変更の影響を受けない。さらに高精度。
import time
start = time.perf_counter()
# 実行する処理
time.sleep(2)
end = time.perf_counter()
print(f"処理時間: {end - start} 秒")
特に高精度な計測が必要な場合に有用(パフォーマンスチューニングや詳細なプロファイリングを行う場合)。
参考