1. はじめに
Pythonでコードの実行時間を測定する方法は、プログラムの最適化や処理速度の検証において非常に重要です。特にスクリプトの一部が重い処理を含んでいる場合、どこに時間がかかっているのかを知ることが、改善への第一歩となります。
本記事では、Pythonの標準ライブラリであるtime
モジュールに含まれるtime.time()
を使って、簡単に実行時間を測定する方法を丁寧に解説します。
Python初心者〜中級者の方を対象に、基本的な使い方から実践的な応用例、注意点まで網羅しています。
2. Pythonで実行時間を測定する:time.time()の基本
2-1. time.time()とは?
time.time()
は、1970年1月1日(UNIXエポック)からの経過秒数(浮動小数点数)を返す関数です。これを使うことで、ある処理の前後で時間を取得し、その差分を求めることで処理にかかった実行時間を簡単に測定できます。
2-2. 基本的な使用例
以下の例では、スリープ処理にかかる時間を測定しています。
import time
# 開始時間を記録
start_time = time.time()
# 何らかの処理(ここでは2秒待機)
time.sleep(2)
# 終了時間を記録
end_time = time.time()
# 実行時間を計算
elapsed_time = end_time - start_time
print(f"処理にかかった時間: {elapsed_time:.3f} 秒")
実行結果:
処理にかかった時間: 2.002 秒
このように、処理の前後でtime.time()
を呼び出すことで、どれくらいの時間がかかったかを簡単に測定できます。
3. よくある使い方・応用例
3-1. 関数の実行時間を測る
関数単位で処理時間を測定したい場合は、以下のように記述します。
import time
def slow_function():
time.sleep(1.5)
start = time.time()
slow_function()
end = time.time()
print(f"slow_functionの実行時間: {end - start:.2f} 秒")
実行結果:
slow_functionの実行時間: 1.50 秒
3-2. 複数処理の比較に使う
異なるアルゴリズムの実行速度を比較したいときにも便利です。
import time
# 処理A(リスト内包表記)
start = time.time()
squares = [i * i for i in range(10_000_000)]
end = time.time()
print(f"処理Aの実行時間: {end - start:.3f} 秒")
# 処理B(forループ)
start = time.time()
squares = []
for i in range(10_000_000):
squares.append(i * i)
end = time.time()
print(f"処理Bの実行時間: {end - start:.3f} 秒")
実行結果:
処理Aの実行時間: 0.450 秒
処理Bの実行時間: 0.930 秒
このように、より高速な処理方法を選定するためのベンチマークにも活用できます。
3-3. ループ内で処理時間をログ出力する
ループ処理の各ステップで時間計測したい場合にも応用可能です。
import time
for i in range(3):
start = time.time()
time.sleep(1) # 処理内容に置き換える
end = time.time()
print(f"{i+1}回目の処理時間: {end - start:.2f} 秒")
実行結果:
1回目の処理時間: 1.00 秒
2回目の処理時間: 1.00 秒
3回目の処理時間: 1.00 秒
4. 注意点・エラー対策
4-1. time.time()の精度
time.time()
の精度はプラットフォームに依存し、ナノ秒単位までは測れません。高精度な時間測定が必要な場合は、time.perf_counter()
の使用を検討しましょう。
4-2. 実行時間が短すぎる処理
処理が速すぎる場合、測定結果が0.000秒となることがあります。十分な回数を繰り返すか、処理をまとめて測定する工夫が必要です。
4-3. time.sleep()の実行時間は正確ではない
time.sleep()
は「最低限その秒数を待つ」ものであり、正確な秒数が保証されるわけではありません。そのためベンチマークの代用にはなりません。
5. まとめ
この記事では、Pythonで実行時間を測定する方法としてtime.time()
の基本から応用まで解説しました。
time.time()
は処理の前後の時刻差を取ることで簡単に実行時間を測定できる- ループ処理、関数単位、アルゴリズム比較など応用範囲が広い
- 高精度が必要な場合は
time.perf_counter()
の使用も検討
処理の最適化やボトルネックの特定、実行速度の比較検証など、実務でも非常に役立つテクニックです。学習段階でも、時間を測ってみることで理解が深まりますので、積極的に活用してみてください。