今回は、Pythonのsleep関数で処理を一時停止する方法についてご紹介します。
sleep関数とは
Pythonの標準ライブラリであるtimeモジュールには、sleepという便利な関数が用意されています。
この関数を使うと、プログラムの実行を指定した秒数だけ一時停止させることができます。
具体的には、time.sleep(1)のように呼び出すと、1秒間プログラムの進行を止めることが可能です。
非常にシンプルな構文で扱いやすい一方で、ブロッキング性やOSのタイマー精度など、事前に知っておきたい注意点があります。
sleep関数の基本的な使い方
まずは、timeモジュールをインポートしてから、sleep関数を呼び出します。
呼び出し時には、休止させたい秒数を指定します。
1 2 3 4 5 |
import time print("処理開始") time.sleep(1) # 1秒間一時停止 print("1秒後に実行") |
上記のコードを実行すると、1秒待機してから「1秒後に実行」が出力されます。
また、浮動小数点数を渡すことでミリ秒単位の指定も可能です。
1 2 3 4 5 |
import time # 約1ミリ秒待機 time.sleep(0.001) print("ミリ秒単位での待機が完了") |
ただし、実際の待機時間はOSのタイマー精度に依存するため、指定した時間より長くなる可能性がある点に注意してください。
応用例と注意点
ループ処理との組み合わせ
ループ内でsleepを使うと、繰り返し実行される処理の間隔を定期的にあけることができます。
1 2 3 4 5 |
import time for i in range(3): time.sleep(1) print(f"{i+1}回目のループです") |
1回目のループです
2回目のループです
3回目のループです
このように、ループのたびに1秒の休止を挟むことができます。
指定時刻までの待機
datetimeモジュールを使うと、指定した時刻まで待機させることも可能です。
1 2 3 4 5 6 7 8 9 10 |
from datetime import datetime import time # 例として2025年1月1日0時0分0秒まで待機 target = datetime.strptime("2025-01-01 00:00:00", "%Y-%m-%d %H:%M:%S") now = datetime.now() wait_seconds = (target - now).total_seconds() time.sleep(wait_seconds) print("新年です!") |
この例では、現在時刻と目標時刻との差分を計算し、その秒数をsleepに渡して待機させています。
非同期処理への対応
非同期処理の文脈では、asyncioモジュールのasyncio.sleepを使うことで、他の処理をブロックせずに待機できます。
1 2 3 4 5 6 7 8 |
import asyncio async def main(): print("待機開始") await asyncio.sleep(1) print("1秒後に再開") asyncio.run(main()) |
asyncio.sleepを使うと、CPUリソースを有効活用しながら複数のタスクを並行して実行できます。
よくあるエラーと対処法
sleep関数を使用する際に特に注意したいポイントやエラーをまとめます。
- ValueError: 引数に負の値を指定すると発生します。必ず正の数を指定してください。
- ブロッキング性: time.sleepはスレッド全体を止めるため、GUIプログラムや並行処理を行う場合は動作に影響を与える可能性があります。必要に応じてasyncio.sleepなどの非同期処理を検討してください。
- OS依存の精度: OSごとにタイマーの精度が異なるため、実際の停止時間が意図より長くなることがあります。特に非常に短い時間(ミリ秒単位)を指定する際は注意が必要です。
- 例外発生: sleep中に例外が発生すると、待機が途中で中断されるため、try-exceptなどの例外処理を適宜組み込みましょう。
まとめ
timeモジュールのsleep関数は、シンプルな構文で実行を任意の秒数だけ停止できる便利な機能です。
ただし、ブロッキングやタイマー精度などの特性を理解し、場合によっては非同期処理を検討する必要があります。
正の数値を指定することや例外処理を行うなど、基本的な注意点を押さえて上手に活用すると、さまざまな場面で役立ちます。