Life is Like a Boat

忘備録や投資日記、プログラミングに関するメモやtipsなど

APSchedulerを使ってcronやHeroku Schedulerにサヨナラする

例えば、定期的にデータをどこから引っ張ってきてDBに落としたい時にVPSではcron、HerokuではHeroku Schedulerを使っていたのですが、APSchedulerが良いとなんども聞いたので、@kabkansaiさんのブログを参考にHeroku Appで使ってみました。

www.stockdog.work

BlockingSchedulerが一番シンプルな使い方ができるクラスだと公式にありました。ですので今回は、これを元にいろんなケースを考えてみました。

月曜から金曜までの11:50にjob.run()を実行する

from apscheduler.schedulers.blocking import BlockingScheduler
import job

if __name__ == '__main__':
    scheduler = BlockingScheduler({'apscheduler.timezone': 'Asia/Tokyo'})
    scheduler.add_job(job.run, 'cron', day_of_week='mon-fri', hour='11', minute='50')
    scheduler.start()

毎日9時、11時、16時、17時に実行する

scheduler.add_job(job.run, 'cron', hour=‘9,11,16,17’)

毎月最終日曜日の0:00に実行する

scheduler.add_job(job.run, 'cron', day='last sun')

月曜から金曜の15:10から21:10まで1時間おきに実行する

scheduler.add_job(job.run, 'cron', day_of_week='mon-fri', hour='15-21', minute='10')

6月から8月、11月から12月の第2金曜日の0時半、1時半、2時半、3時半に実行する

scheduler.add_job(job.run, 'cron', month='6-8,11-12', day='2nd fri', hour='0-3', minute='30')

これ複雑すぎますよね!公式に書いてあった例を少し変えたものです。

私はcronのsyntaxを覚える気が昔から全くなくてですね笑、これだとわかりやすいですよね!