Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
生徒
「Pythonで処理にどのくらい時間がかかったかを調べたいんですけど、どうすればいいですか?」
先生
「Pythonではtime.perf_counter()という方法を使えば、正確に経過時間を測ることができますよ。」
生徒
「perf_counterってなんだか難しそうな名前ですね…。初心者でも使えますか?」
先生
「大丈夫!基本の使い方を一緒に見ていきましょう。time.sleep()と組み合わせて覚えると分かりやすいですよ。」
1. 経過時間とは?なぜ測るの?
プログラミングにおける「経過時間」とは、特定の処理が始まってから完了するまでに費やした「正味の時間」を指します。料理に例えるなら、レシピの最初から最後までにかかった「調理時間」を測るようなものです。
なぜこの時間を測る必要があるのでしょうか?主な理由は3つあります。
- プログラムの健康診断: 動作が重い原因(ボトルネック)を見つけ出し、スムーズに動くよう改善するため。
- 効率の比較: Aの書き方とBの書き方、どちらが速く計算できるかを客観的に判断するため。
- ユーザー体験の向上: 待ち時間が長すぎないかを確認し、快適なアプリを作るため。
初心者の方でもイメージしやすいよう、身近な「カップラーメンの待ち時間」をシミュレーションしたサンプルコードを見てみましょう。
import time
print("お湯を入れました。3分(3秒)待ちます...")
# 3秒間、プログラムを一時停止させて「待ち時間」を作ります
time.sleep(3)
print("3分(3秒)経ちました!完成です。")
このように、Pythonでは「ストップウォッチ」のボタンを押すように、プログラムの開始と終了のタイミングを記録することで、誰でも簡単に処理時間を計測できるようになります。
2. time.perf_counter()の基本的な使い方
Pythonでプログラムの実行速度を精密に計測したいとき、最も推奨されるのがtime.perf_counter()です。この関数は「高精度なタイマー」として設計されており、システムの動作状況に左右されにくい、非常に安定した数値を返してくれます。
特にプログラミング初心者の方にとって、「自分の書いたコードが何秒で動いているのか」を可視化することは、効率的なコードを書くための第一歩になります。まずは、以下のシンプルなサンプルコードで、時間の測り方の基本形を覚えてしまいましょう。
import time
# 1. 計測開始時の時間を記録する
start_time = time.perf_counter()
# --- ここに計測したい処理を書く ---
print("ただいま計測中です...")
time.sleep(2) # 2秒間だけ処理を一時停止させます
# ------------------------------
# 2. 処理が終わった時の時間を記録する
end_time = time.perf_counter()
# 3. 「終わりの時間」から「始まりの時間」を引いて、かかった時間を計算
elapsed_time = end_time - start_time
print(f"処理にかかった時間: {elapsed_time}秒")
ただいま計測中です...
処理にかかった時間: 2.000123456秒
使い方はとても簡単で、「測りたい処理を start と end で挟むだけ」です。time.perf_counter()が返す値は、特定の時点からの経過時間(秒)ですので、その差分を出すことで正確な実行時間がわかります。
この関数はマイクロ秒単位(100万分の1秒)という非常に細かい精度で計測できるため、一瞬で終わるような計算処理のスピードを比較する際にも非常に役立ちます。まずはこの「挟んで引く」という形をテンプレートとして活用してみてください。
3. time.sleep()とは?プログラムを一時停止させる仕組み
Pythonで「処理を少しだけ待ちたい」「一定の間隔を空けて実行したい」という時に欠かせないのがtime.sleep()関数です。この関数を使うと、指定した秒数だけプログラムの動きをピタッと止めることができます。
イメージとしては、目覚まし時計をセットするようなものです。例えばtime.sleep(3)と記述すれば、コンピューターはその行で「3秒間お休み」し、時間が経過した瞬間に次の行の命令を再開します。この「待機」の処理は、プログラミングの世界では「ウェイトを入れる」とも呼ばれます。
まずは、一番シンプルな書き方を見てみましょう。プログラミングが初めての方でも、以下のコードをコピーして実行するだけで動きを確認できます。
import time
print("カウントダウンを開始します。")
time.sleep(1)
print("3...")
time.sleep(1)
print("2...")
time.sleep(1)
print("1...")
time.sleep(1)
print("スタート!")
カウントダウンを開始します。
(1秒ごとに数字が表示される)
スタート!
この仕組みは、Webサイトから情報を集める(スクレイピング)際に相手のサーバーに負荷をかけないように配慮したり、ゲームの演出でメッセージをゆっくり表示させたりと、実務でも非常に多くの場面で活用されています。
使い方のポイントは、冒頭でimport timeと書いて、「時間を扱うための道具箱」を読み込んでおくことだけです。これを忘れるとエラーになってしまうので注意しましょう。
4. 実用的な経過時間の計測例:ループ処理を測ってみよう
「この処理、どれくらい時間がかかっているんだろう?」と疑問に思ったら、実際にプログラムを動かして測るのが一番確実です。 ここでは、プログラミング初心者の方でもイメージしやすいように、「5回の繰り返し処理(ループ)」にかかる全体の時間を計測するサンプルコードを紹介します。
Pythonで時間を測る際は、非常に精度の高い time.perf_counter() を使うのが一般的です。以下のコードをコピーして、お手元の環境で実行してみてください。
import time
# 1. 計測開始!その瞬間の時刻を記録します
start_time = time.perf_counter()
print("処理を開始します...")
# 5回繰り返すループ処理(1回ごとに1秒お休みします)
for i in range(5):
print(f"{i + 1}回目のタスクを実行中...")
time.sleep(1) # 1秒間、プログラムを一時停止させる命令です
# 2. 処理終了!その瞬間の時刻を記録します
end_time = time.perf_counter()
# 3. 「終わりの時刻」から「始まりの時刻」を引いて、かかった時間を計算
elapsed_time = end_time - start_time
print(f"すべての処理が完了しました!")
print(f"合計の処理時間: {elapsed_time:.4f} 秒")
処理を開始します...
1回目のタスクを実行中...
2回目のタスクを実行中...
3回目のタスクを実行中...
4回目のタスクを実行中...
5回目のタスクを実行中...
すべての処理が完了しました!
合計の処理時間: 5.0012 秒
このコードのポイントは、計測したい処理を start と end の変数で「サンドイッチ」のように挟んでいる点です。
time.sleep(1) を使って意図的に1秒ずつ止めているため、合計で約5秒という結果が表示されます。
このように、ループ回数を増やしたり、中身の処理を書き換えたりすることで、自分の作ったプログラムがどれだけ効率的に動いているかを簡単にチェックできるようになります。
5. time.perf_counter()と他の時間関数の違い:どれを使うべき?
Pythonで「時間を計る」と言っても、実は目的によって使うべき道具(関数)が異なります。初心者の方が迷いやすい3つの代表的な関数を、身近な例えで比較してみましょう。
- time.time():【時計】 現在の時刻(2026年1月30日…など)を知るためのもの。途中で時計の時刻修正が入るとズレるため、精密な計測には不向きです。
- time.process_time():【作業時間】 CPUがそのプログラムの計算のために「実際に動いた時間」だけを数えます。休憩(スリープや待機)時間はカウントされません。
- time.perf_counter():【ストップウォッチ】 処理が始まってから終わるまでの「純粋な経過時間」を最高精度で測ります。処理速度を比較したいなら、これが正解です。
実際に、これら3つがどのように違うのか、簡単なプログラムで確かめてみましょう。3秒間だけ「何もしないで待つ」という処理を計測してみます。
import time
# それぞれの関数で計測開始
start_wall = time.time()
start_cpu = time.process_time()
start_perf = time.perf_counter()
# 3秒間、プログラムを一時停止させる
print("3秒間待機します...")
time.sleep(3)
# 計測終了と結果表示
print(f"time()の結果: {time.time() - start_wall:.4f}秒")
print(f"process_time()の結果: {time.process_time() - start_cpu:.4f}秒")
print(f"perf_counter()の結果: {time.perf_counter() - start_perf:.4f}秒")
このコードを実行すると、process_time()だけが「0秒」に近い数値になります。これは「待機中(sleep中)はCPUが働いていない」とみなされるからです。一方で、time.perf_counter()は、人間がストップウォッチで測ったときと同じように、正確に3秒前後の経過時間を返してくれます。
「プログラムのこの部分、どれくらい時間がかかっているかな?」と気になったときは、迷わず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の面白さを感じられる便利な機能です。
まとめ
Pythonで経過時間を測る基本と重要ポイントの振り返り
本記事では、Pythonで経過時間を測る方法として、time.perf_counterとtime.sleepの使い方を中心に、初心者の方でも理解しやすいように詳しく解説してきました。Pythonの時間計測は、プログラムの処理速度を把握し、効率の良いコードを書くために非常に重要な技術です。特に処理の開始と終了を記録し、その差を求めるという基本の考え方は、すべての時間計測の基礎となります。
time.perf_counterは高精度な時間計測が可能であり、プログラムのパフォーマンスを確認する際に最も適した関数です。一方でtime.sleepは、処理を一定時間停止させることで、待ち時間の再現や動作確認を行うために使用されます。この二つを組み合わせることで、Pythonの時間制御と時間計測をより深く理解することができます。
time.perf_counterとtime.sleepの使い分けの理解
Pythonで経過時間を測定する際には、それぞれの関数の役割を正しく理解することが重要です。time.perf_counterは「計測するための関数」であり、time.sleepは「待つための関数」です。この違いを理解することで、目的に応じた適切な使い方ができるようになります。
また、経過時間の測定では、処理をstartとendで挟むというシンプルなパターンを覚えることが重要です。この基本形を理解すれば、どのようなプログラムでも応用できるようになります。
サンプルプログラムで理解する時間計測の応用
次に、複数の処理を比較しながら経過時間を測定する実践的なサンプルコードを紹介します。これにより、どの処理が効率的かを判断できるようになります。
import time
def fast_process():
for i in range(500000):
pass
def slow_process():
for i in range(1000000):
pass
start_fast = time.perf_counter()
fast_process()
end_fast = time.perf_counter()
start_slow = time.perf_counter()
slow_process()
end_slow = time.perf_counter()
print("高速処理の時間:", end_fast - start_fast)
print("低速処理の時間:", end_slow - start_slow)
このように、複数の処理を比較することで、プログラムの改善ポイントを見つけることができます。Pythonの時間計測は単なる確認ではなく、効率化のための重要な手段です。
初心者が意識すべき時間計測のポイント
Python初心者の方が時間計測を学ぶ際には、秒という単位の理解と、処理の流れを意識することが重要です。time.sleepでは秒単位で停止するため、数値の意味を正しく理解する必要があります。また、環境によって多少の誤差が出ることもあるため、複数回測定して平均を取るとより正確な結果が得られます。
さらに、time.perf_counterは現在時刻ではなく、経過時間の計測に特化した関数である点も重要なポイントです。この違いを理解しておくことで、適切な場面で使い分けることができます。
Pythonの時間計測を活用するメリットと実務での活用
Pythonで経過時間を測定できるようになると、プログラムの処理速度を改善するための判断ができるようになります。例えば、データ処理の最適化やアルゴリズムの比較、処理時間の短縮など、実務で役立つ場面は非常に多く存在します。
また、ユーザー体験の向上にもつながります。処理が遅いと感じる原因を特定し、改善することで、より快適なアプリケーションを作ることができます。これはWeb開発やシステム開発において非常に重要なポイントです。
Pythonのtimeモジュールはシンプルでありながら強力な機能を持っており、初心者から上級者まで幅広く活用されています。今回学んだtime.perf_counterとtime.sleepをしっかり理解し、実際のプログラムに取り入れることで、より実践的なスキルを身につけることができます。
生徒
「Pythonで時間を測る方法がこんなに簡単だとは思いませんでした。」
先生
「基本は開始と終了の差を取るだけなので、とてもシンプルな仕組みなんです。」
生徒
「time.sleepとperf_counterの役割の違いもよく分かりました。」
先生
「その理解ができていれば十分です。用途に応じて使い分けていきましょう。」
生徒
「これからはプログラムの速さも意識して書いてみます。」
先生
「とても良い姿勢です。時間計測はプログラムの質を高める大切な技術ですよ。」