見出し画像

【Python】scheduleモジュールで『特定の時間帯に』定期実行

背景

Pythonで定期実行する方法はみなさんご存知だと思います。例えば、
1時間ごとに「job()」を実行であれば

schedule.every(1).hours.do(job)

毎日12:30に「job()」を実行であれば

schedule.every().day.at("12:30").do(job)

ここまではググるとたくさん説明している記事が存在します。
しかし、『特定の時間帯に』定期実行するコードを説明している記事が少なく、答えにたどり着くまでものすごく時間がかかったのでご紹介します。
『特定の時間帯に』定期実行とは、
昼間の時間帯(12時から18時)に1時間毎で定期実行、
お店や遊園地が開いている時間帯(8時から21時)に15分毎で定期実行。
などです。

力技のコード

例えば、
毎日12時から18時の間で1時間毎に「job()」を実行
のコードを書きたいとします。
まず、力技で説明するとこんな感じです。

import schedule
from time import sleep

def job():
    print("実行")

schedule.every().day.at("12:00").do(job)
schedule.every().day.at("13:00").do(job)
schedule.every().day.at("14:00").do(job)
schedule.every().day.at("15:00").do(job)
schedule.every().day.at("16:00").do(job)
schedule.every().day.at("17:00").do(job)
schedule.every().day.at("18:00").do(job)
 
while True:
    schedule.run_pendins()
    sleep(10)

力技ですが、見てすぐわかります。
ですが「1時間毎」ならこれで済みますが、「30分毎」だとこれの2倍の記述。「15分毎」だと4倍コードを記述しないといけません。そこまでいくとコードの書き間違いや時間帯を変更する場合の手間が半端ないです。

正解のコード

例えば9時から23時の間で、毎時05分、20分、35分、50分の15分毎に定期実行したいとします。「09:05」から「22:50」まで15分毎に定期実行します。

scheduleモジュールに『for文』と『range関数』を組み合わせます。

ここから先は

974字

¥ 500

この記事が気に入ったらサポートをしてみませんか?