Pythonのscheduleライブラリで1回だけのジョブを実行する

定期実行ではなく1回だけのジョブをscheduleライブラリで行いたいなら関数の戻り値にschedule.CancelJobを与える。

import schedule, time

def job():
    print('hoge')
    return schedule.CancelJob

schedule.every().day.at('07:00').do(job)
schedule.every().day.at('12:00').do(job)
schedule.every().day.at('19:45').do(job)

while True:
    n = schedule.idle_seconds()
    if n is None:
        break
    elif n > 0:
        time.sleep(n)
    schedule.run_pending()

schedule.CancelJobは文字通りそのジョブがスケジュールからキャンセルされるだけなのでwhileループによる保留は止まらない。全ジョブ完了後にスクリプトを終わらせるためにブレイクポイントを適宜作っておく。

環境

参考