【Python】指定した時間まで待機してから処理を開始する方法(sleep・スケジューリング)

【Python】指定した時間まで待機してから処理を開始する方法(sleep・スケジューリング) Python

Pythonでプログラムを「指定した時間まで待ってから実行したい」という場面は、データ取得のタイミングを調整したり、定期処理を夜間に動かしたいときなどに多く見られます。この記事では、time.sleep()を使った単純な待機から、時刻指定で処理を始める方法、さらにはスケジューリングライブラリを使った柔軟な実行までを解説します。

time.sleep()で一定時間待つ方法

Pythonの標準ライブラリtimeには、プログラムの実行を一時停止するtime.sleep()という関数があります。単位は秒で、例えば10秒間待つ場合は次のように書きます。

import time

print("処理を開始します(10秒待機)")
time.sleep(10)
print("10秒後に処理を開始しました")

この方法は「〇秒後に開始したい」といったケースで使われます。ただし、明確な「時刻」を指定したい場合には別の方法が必要です。

指定した時刻まで待機してから処理を開始する方法

特定の時刻(たとえば「15:30:00」)に処理を始めたい場合には、現在時刻と目標時刻を比較し、必要な秒数を算出してsleep()で待機するという手法が使えます。

import time
from datetime import datetime, timedelta

# 目標の時刻(例:15:30:00)
target_time = datetime.strptime("15:30:00", "%H:%M:%S").time()
now = datetime.now()

# 今日のその時刻としてdatetimeを構築
today_target = datetime.combine(now.date(), target_time)

# 現在時刻をすでに過ぎていれば翌日
if now > today_target:
    today_target += timedelta(days=1)

# 待機秒数を計算してsleep
wait_seconds = (today_target - now).total_seconds()
print(f"{int(wait_seconds)}秒間待機してから処理を開始します")
time.sleep(wait_seconds)

# 実行処理
print("指定時刻に到達しました。処理を開始します。")

この方法を使えば、日付をまたぐようなスケジューリングも柔軟に対応できます。

scheduleライブラリを使ってスケジューリング処理を組む

繰り返し毎日・毎時などで処理を自動実行したい場合には、scheduleという外部ライブラリを使うのが便利です。インストールは次のように行います。

pip install schedule

簡単な使い方は以下のとおりです。

import schedule
import time

def my_job():
    print("処理を開始しました")

# 毎日15:30に実行
schedule.every().day.at("15:30").do(my_job)

print("スケジューラーを開始します")
while True:
    schedule.run_pending()
    time.sleep(1)

このコードは常駐プロセスとして動作し、毎日15:30に指定された関数を実行します。

まとめ

単純に数秒待つのであればtime.sleep()、特定の時刻まで待機したい場合はdatetimeとsleepの併用、定期的な実行を行いたい場合はscheduleライブラリと使い分けるのが基本です。目的に応じた実装で、より効率的なPythonスクリプトを構築しましょう。