PythonPython [パイソン]汎用プログラミング言語プログラムの実行中に処理を一定時間だけ一時停止(待機)させたい場合は、標準ライブラリであるtimeモジュールのsleep()関数を使用します。
APIAPI [エーピーアイ]Application Programming Interface。異なるソフトウェア間の接続口を連続で叩く際のレートリミット対策や、定期的に処理を実行するバッチ処理、スクレイピング時のサーバー負荷軽減など、実務でも非常に頻繁に使われる重要な機能です。
本記事では、time.sleepの基本的な使い方から、ミリ秒単位の指定方法、実務での具体的な活用例、そして非同期処理におけるasyncio.sleepとの違いまで詳しく解説します。
Pythonのtime.sleep関数の基本構文
sleep()関数を使うには、まず標準ライブラリのtimeモジュールをインポートします。
import time
time.sleep(秒数)引数には待機させたい秒数を数値で指定します。この間、time.sleep() を呼び出したスレッドの実行は一時停止(ブロック)されます。
0以上の値を指定できます。負の値を渡すと ValueError が発生します。
sleep関数を使った処理の一時停止(待機)方法
整数(秒単位)で待機する基本的な使い方
最も基本的な、整数(秒単位)を指定する例です。
import time
print("処理を開始します。")
# 3秒間処理を停止するtime.sleep(3)
print("3秒後に処理が再開されました。")実行結果
処理を開始します。(3秒間待機)3秒後に処理が再開されました。小数を指定して短い時間だけ待機する方法
Pythonのtime.sleep()は整数のほかに**浮動小数点数(float)**も受け付けます。
そのため、1秒未満の短い待機時間(ミリ秒など)を設定したい場合は小数を指定します。
import time
print("スタート")
# 0.5秒(500ミリ秒)待機するtime.sleep(0.5)
print("0.5秒経過しました")
# 1.5秒待機するtime.sleep(1.5)
print("終了")※ただし、time.sleep() は指定した時間を「最低限の待機時間」として扱うため、OSOS [オーエス]Operating System。基本ソフトウェアのスケジューリングやシステム負荷などによって、実際の待機時間が指定値より長くなる場合があります。数ミリ秒単位の厳密なリアルタイム制御には向いていません。
実務で役立つPython sleep関数の活用例
APIリクエストやスクレイピング時の負荷軽減(待機処理)
外部のAPIを連続で呼び出したり、Webサイトをスクレイピングしたりする場合、サーバーに過剰な負荷をかけないようにリクエストの間にsleepを挟むのがマナーです。APIのレート制限や利用規約を確認したうえで、必要に応じてリクエスト間隔を調整してください。
import time
urls = [ "http://example.com/api/data/1", "http://example.com/api/data/2", "http://example.com/api/data/3"]
for url in urls: print(f"{url} へリクエストを送信中...") # 実際のHTTPリクエスト処理(ここでは省略)
# サーバーへの負荷を考慮し、1リクエストごとに2秒待機する time.sleep(2)
print("すべてのリクエストが完了しました。")whileループと組み合わせた定期実行・監視スクリプト
while Trueによる無限ループの中にsleep()を入れることで、指定した間隔で繰り返し実行される定期バッチや監視スクリプトを作成できます。
import timefrom datetime import datetime
print("監視を開始します。(Ctrl+Cで終了)")
try: while True: now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"[{now}] システムの稼働状況を確認中...")
# 次の確認まで60秒待機する time.sleep(60)
except KeyboardInterrupt: print("監視を終了します。")※このプログラムはCtrl+Cを押すまで60秒ごとに現在時刻を表示し続けます。
非同期処理(asyncio)でsleepを使う方法と注意点
time.sleep() は呼び出し元のスレッドをブロックします。asyncio のイベントループ上で実行すると、他のタスクの実行も妨げる可能性があります。
複数の処理を並行して実行する 非同期処理(asyncio) を行うプログラムの中でtime.sleep()を使うと、他の並行処理まで止まってしまうため注意が必要です。
非同期処理の中で待機を行いたい場合は、time.sleep()ではなく、非同期用の asyncio.sleep() を使用します。
asyncio.sleep()関数の使い方とtime.sleepとの違い
import asyncioimport time
async def task(name, delay): print(f"タスク {name} を開始します。") # asyncio.sleepを使用(他のタスクの実行をブロックしない) await asyncio.sleep(delay) print(f"タスク {name} が {delay}秒後に完了しました。")
async def main(): print("非同期処理の開始")
# 複数のタスクを並行して実行 await asyncio.gather( task("A", 2), task("B", 1), task("C", 3) )
print("すべての非同期処理が完了")
# 非同期プログラムの実行asyncio.run(main())実行結果
非同期処理の開始タスク A を開始します。タスク B を開始します。タスク C を開始します。タスク B が 1秒後に完了しました。タスク A が 2秒後に完了しました。タスク C が 3秒後に完了しました。すべての非同期処理が完了このように、await asyncio.sleep()を使えばスレッド全体を止めず、その関数の処理だけを一時停止して他のタスクに制御を譲ることができます。
まとめ:Pythonのsleep処理をマスターしよう
Pythonの処理停止(sleep)に関する重要なポイントをまとめます。
- 基本的な待機:
time.sleep(秒数)を使う - ミリ秒の待機:
time.sleep(0.5)のように小数を指定する - 主な用途: ループ内の処理間隔の調整、API・スクレイピングのレートリミット対策、定期監視など
- 注意点: 厳密な時間制御には向かない(OSによってわずかなズレが生じる)
- 非同期処理:
async/awaitを使う環境ではasyncio.sleep()を使用する
用途に合わせて適切なsleep処理を使いこなしましょう。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
「絶対に挫折させない」という著者の強い意志を感じる、プログラミングの「最初の1冊」としておすすめできる良書です。