Pythonで一定時間プログラムの実行を止めたいとき、time.sleep()
は最も手軽で有名な方法です。
しかし「ただ止める」だけでなく、使い方や組み合わせ次第で処理速度やリソース効率を改善できることをご存じでしょうか?
この記事では、基本から裏技的な応用まで、全10パターンを徹底解説します。
1. 基本のtime.sleep()構文
import time
time.sleep(2) # 2秒間待機
引数は秒単位(小数も可)。time.sleep(0.5)
なら500ミリ秒だけ待機できます。
2. ミリ秒単位での精密スリープ
sleep()
は秒単位の浮動小数を受け取れるため、100ミリ秒など短いスリープも可能です。
time.sleep(0.1) # 0.1秒(100ミリ秒)待機
短い間隔でポーリングする処理に有効です。
3. CPU負荷を抑えるループ制御
高速ループはCPU使用率を100%に近づけます。sleep()
を挟むことで、無駄な負荷を軽減できます。
while True:
check_status()
time.sleep(0.05)
4. ユーザー待機型のスリープ
ユーザーが入力するまで待機する場合でも、スリープを入れるとCPUを浪費しません。
while not user_ready():
time.sleep(0.1)
5. アニメーションやプログレスバーとの組み合わせ
CLIアプリで動きのある演出を作るときに、短いsleep
を入れると見栄えが向上します。
for i in range(10):
print('.', end='', flush=True)
time.sleep(0.2)
6. APIアクセスのレート制限対策
外部APIの連続リクエストは制限に引っかかることがあります。
適切なsleep
を入れて回避しましょう。
for url in urls:
fetch(url)
time.sleep(1.2)
7. 擬似的な処理遅延の演出
テストやデモで「時間がかかる処理」を再現するのに便利です。
print("処理中...")
time.sleep(3)
print("完了!")
8. バックグラウンド処理とのバランス調整
マルチスレッド処理でのスリープは、他スレッドへの処理時間を譲る効果があります。
import threading
def worker():
while True:
do_task()
time.sleep(0.1) # 他スレッドの処理を妨げない
threading.Thread(target=worker).start()
9. スリープ時間を動的に変更
処理の進行状況に応じて待機時間を短縮・延長できます。
wait_time = 1.0
for _ in range(5):
do_something()
time.sleep(wait_time)
wait_time *= 0.8 # 徐々に高速化
10. 高精度タイマーと組み合わせる
sleep()
は秒数指定の精度が環境依存でズレることがあります。time.perf_counter()
と併用してズレを補正可能です。
import time
start = time.perf_counter()
while True:
process()
elapsed = time.perf_counter() - start
time.sleep(max(0, 1 - elapsed))
start = time.perf_counter()
【比較表】sleepの活用場面
活用例 | 推奨sleep時間 | 目的 |
---|---|---|
高速ループの負荷軽減 | 0.01〜0.1秒 | CPU節約 |
APIレート制限回避 | API制限値に応じる | アクセス制限防止 |
アニメーション演出 | 0.1〜0.3秒 | 視覚効果向上 |
テスト用遅延 | 任意 | 動作確認 |
まとめ
time.sleep()
は単なる「一時停止」以上の役割を持ち、
CPU負荷軽減、API制限回避、演出、スレッド調整など幅広く応用できます。
「待つ」ことを戦略的に使えば、Pythonアプリの品質やユーザー体験を大きく改善できます。
この内容、図解入りで処理フローを可視化した図も追加できますが、作りますか?
例えば「sleepを入れた場合と入れない場合のCPU使用率比較」図を入れると、説得力が増します。
コメント