APSchedulerを使ってcronやHeroku Schedulerにサヨナラする
例えば、定期的にデータをどこから引っ張ってきてDBに落としたい時にVPSではcron、HerokuではHeroku Schedulerを使っていたのですが、APSchedulerが良いとなんども聞いたので、@kabkansaiさんのブログを参考にHeroku Appで使ってみました。
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を覚える気が昔から全くなくてですね笑、これだとわかりやすいですよね!