Pythonのscheduleライブラリでジョブの頻度を変更しながら定期実行する
この投稿は最終更新日から1年以上経過しています
scheduleライブラリで定期実行するジョブ頻度を時間帯によって変化させたい。例えば日中は高頻度で処理を行わせるが夜になったら低頻度にするというふうに。
例:毎時0秒からは10秒ごと、30秒からは5秒ごと、45秒からは1秒ごとにジョブを実行する。
import time
import datetime
import schedule as s
def child_job():
print(datetime.datetime.now().second)
def job(sec):
s.clear('child')
s.every(sec).seconds.do(child_job).tag('child')
s.every().minute.at(":00").do(job, 10)
s.every().minute.at(":30").do(job, 5)
s.every().minute.at(":45").do(job, 1)
while True:
s.run_pending()
time.sleep(1)
実行結果
10
20
30
35
41
46
47
48
49
50
51
52
53
54
55
56
57
58
59
0
10
- ジョブをスケジュールするジョブを定義して管理させる
- 定刻になると親ジョブに呼び出されるjob()は子ジョブの現行スケジュールを削除して新たなスケジュールを組む
- tag('child')のようにタグ付けして子ジョブのみをキャンセルする
- 35→41→46とあるように1秒未満の精度は求められない
環境
- Python 3.7.9
- schedule 1.0.0