Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
生徒
「Pythonで処理にどのくらい時間がかかったかを調べたいんですけど、どうすればいいですか?」
先生
「Pythonではtime.perf_counter()という方法を使えば、正確に経過時間を測ることができますよ。」
生徒
「perf_counterってなんだか難しそうな名前ですね…。初心者でも使えますか?」
先生
「大丈夫!基本の使い方を一緒に見ていきましょう。time.sleep()と組み合わせて覚えると分かりやすいですよ。」
1. 経過時間とは?なぜ測るの?
「経過時間」とは、ある操作が始まってから終わるまでにかかった時間のことです。たとえば、「あるプログラムが3秒で終わった」など、時間の長さを調べることで、動作が遅い原因を見つけたり、効率を改善したりできます。
人間でいうと、ストップウォッチのようなものです。Pythonでもストップウォッチのように、ある処理の前後で時間を測ることができます。
2. time.perf_counter()の基本的な使い方
time.perf_counter()は、Pythonで最も正確に時間を測るための関数です。「パフォーマンス・カウンター」とも呼ばれ、マイクロ秒単位(100万分の1秒)で測定できます。
たとえば、次のように使います。
import time
start = time.perf_counter()
# 測定したい処理
time.sleep(2)
end = time.perf_counter()
print("処理にかかった時間:", end - start, "秒")
処理にかかった時間: 2.000123456 秒
この例では、time.sleep(2)で2秒だけ待機している間の経過時間を測っています。
3. time.sleep()とは?待機の仕組みを知ろう
time.sleep()は、指定した時間だけプログラムの実行を一時停止する関数です。「スリープ」と読むとおり、パソコンが寝ているような状態になります。
たとえば、time.sleep(3)と書くと、3秒間だけ何もしない状態になります。
import time
print("処理を開始します")
time.sleep(3)
print("3秒経ちました")
処理を開始します
(3秒間なにも表示されない)
3秒経ちました
time.sleep()は、経過時間の確認テストや、ゆっくり表示したいときなどに便利です。
4. 実用的な経過時間の計測例
ここでは、for文でループ処理を行い、その全体の時間を計測する例を紹介します。
import time
start = time.perf_counter()
for i in range(5):
print(f"{i + 1}回目の処理中...")
time.sleep(1)
end = time.perf_counter()
print("合計の処理時間:", end - start, "秒")
1回目の処理中...
2回目の処理中...
3回目の処理中...
4回目の処理中...
5回目の処理中...
合計の処理時間: 5.001234 秒
このように、ループや長めの処理にかかる全体の時間も簡単に測定できます。
5. time.perf_counter()と他の時間関数の違い
Pythonには他にも時間を測る関数がいくつかあります。たとえばtime.time()やtime.process_time()などです。
time.time():現在の時刻(UNIX時間)を返すtime.process_time():CPUが処理に使った時間だけを測る(待機時間を含まない)time.perf_counter():最も正確な経過時間を測る(オススメ)
この中では、経過時間を測る用途にはtime.perf_counter()が最適です。
6. 実際の用途と注意点
経過時間の測定は、次のような場面でよく使われます:
- プログラムの処理速度を調べたいとき
- 処理が重い場所を見つけたいとき
- 複数の方法で速度を比較したいとき
注意点として、パソコンの性能や実行環境によって多少の誤差が出ることがあります。繰り返し測定して平均をとると、より正確になります。
7. プログラミング未経験でもわかる応用例
最後に、簡単なミニゲームのような例を紹介します。自分が「Enter」キーを押すまでの反応速度を測るゲームです。
import time
input("Enterキーを押す準備ができたらEnterを押してください:")
start = time.perf_counter()
input("今すぐEnterキーを押してください!")
end = time.perf_counter()
print("反応時間は", round(end - start, 3), "秒でした!")
このように、time.perf_counter()は遊び感覚でも使えて、Pythonの面白さを感じられる便利な機能です。