码迷,mamicode.com
首页 > 其他好文 > 详细

解决apscheduler报错:Run time of job …… next run at: ……)” was missed by

时间:2019-08-29 15:57:53      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:场景   图片   exec   mic   ace   run   mamicode   结合   exe   

 

在Django中使用apscheduler django_apscheduler 实现定时任务, 来完成数据拉取. 一段时间后发现数据量对不上,遂查日志

发现报错如下:

Run time of job …… next run at: ……)” was missed by

技术图片

google 到的是github上的一个issue:https://github.com/agronholm/apscheduler/issues/146

里面说到了一个参数:misfire_grace_time,但是这个参数到底是干嘛用的,在其他地方找到了解释,其中涉及到几个其他参数,但是结合自己的理解综合总结一下

  • coalesce:当由于某种原因导致某个job积攒了好几次没有实际运行(比如说系统挂了5分钟后恢复,有一个任务是每分钟跑一次的,按道理说这5分钟内本来是“计划”运行5次的,但实际没有执行),如果coalesce为True,下次这个job被submit给executor时,只会执行1次,也就是最后这次,如果为False,那么会执行5次(不一定,因为还有其他条件,看后面misfire_grace_time的解释)
  • max_instance: 就是说同一个job同一时间最多有几个实例再跑,比如一个耗时10分钟的job,被指定每分钟运行1次,如果我们max_instance值为5,那么在第6~10分钟上,新的运行实例不会被执行,因为已经有5个实例在跑了
  • misfire_grace_time:设想和上述coalesce类似的场景,如果一个job本来14:00有一次执行,但是由于某种原因没有被调度上,现在14:01了,这个14:00的运行实例被提交时,会检查它预订运行的时间和当下时间的差值(这里是1分钟),大于我们设置的30秒限制,那么这个运行实例不会被执行。

示例:

15分钟一次的的任务,misfire_grace_time 设置100秒,在0:06分的时候提示:

Run time of job "9392_index (trigger: interval[0:15:00], next run at: 2018-10-27 00:15:00 CST)" was missed by 0:06:03.931026  

本来应该在0:00执行的任务,某种原因没有被调度,提示下次运行(0:15)与当前差了6分钟(阈值100秒),所以0:15的时候将不会运行

所以这个参数可以通俗的理解为任务的超时容错配置,给executor 一个超时时间,这个时间范围内要是该跑的还没跑完,就别再跑了。

 

解决:

@register_job(scheduler, cron, day_of_week=mon-fri, hour=18, minute=24, second=0, id=task_time,misfire_grace_time=3600)

增加了一行 

misfire_grace_time=3600

 

解决apscheduler报错:Run time of job …… next run at: ……)” was missed by

标签:场景   图片   exec   mic   ace   run   mamicode   结合   exe   

原文地址:https://www.cnblogs.com/ryan255/p/11429807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!