tokuhirom's Blog

apscheduler で add_job するときは misfire_grace_time の指定が必須

python で job の定期実行を実装するには apscheduler が便利だが、misfire_grace_time の指定をしないと job が実行されないことがあるので注意が必要。 指定していないと以下のようなエラーに悩まされることになる。

Run time of job "send_menu (trigger: cron[day_of_week='mon-fri', hour='11'], next run at: 2016-05-31 11:00:00 CEST)" was missed by 0:00:01.51075

これは、予定された実行時間よりも scheduler の起動が遅れてしまったから実行しないようにしましたよ、というメッセージである。 デフォルトでは 1 秒以上実行が遅延した場合、ジョブは実行されない。 https://github.com/museumsvictoria/nodel/issues/13

しかし実際、1.5秒遅れても実行はしてほしいわけなので以下のように misfire_grace_time を指定し、delay の許容時間を指定する方が良い。

scheduler.add_job(func, trigger='cron', hour='10,11,12', misfire_grace_time=60*60)