文章内容
2019/10/19 9:17:17,作 者: 黄兵
skipped: maximum number of running instances reached (1)
最近在使用apscheduler
做定时任务的时候出现了如下错误:
Execution of job "xxxxx (trigger: interval[3:00:00], next run at: 2019-10-18 15:51:59 CST)" skipped: maximum number of running instances reached (1)
出现问题的原因:
在submit_job
(提交任务)时加1,在_run_job_success
(任务运行成功)时减1。 当self._instances[job.id]
大于job.max_instances
抛出异常。
max_instances
默认值为1,它表示id相同的任务实例数。
我这边同时有两个定时任务,但是有一个定时任务经常运行失败,才出现了此问题。
在源码目录下,搜索关键字maxinum
,找到记录异常的位置:
#apscheduler/schedulers/base.py
if run_times:
try:
executor.submit_job(job, run_times)
except MaxInstancesReachedError:
self._logger.warning(
'Execution of job "%s" skipped: maximum number of running instances reached (%d)',
job, job.max_instances)
except:
self._logger.exception('Error submitting job "%s" to executor "%s"', job, job.executor)
异常抛出位置,继续看submit_job
函数,找到异常抛出位置:
#apscheduler/executors/base.py def submit_job(self, job, run_times): """ Submits job for execution. :param Job job: job to execute :param list[datetime] run_times: list of datetimes specifying when the job should have been run :raises MaxInstancesReachedError: if the maximum number of allowed instances for this job has been reached """ assert self._lock is not None, 'This executor has not been started yet' with self._lock: if self._instances[job.id] >= job.max_instances: raise MaxInstancesReachedError(job) self._do_submit_job(job, run_times) self._instances[job.id] += 1
_instances
变量作用:
在submit_job
(提交任务)时加1,在_run_job_success
(任务运行成功)时减1。 当self._instances[job.id]
大于job.max_instances
抛出异常。
max_instances
默认值为1,它表示id相同的任务实例数。
解决方案:
通过设置max_instances
参数来解决这个问题:
具体代码如下:
# 添加任务,判断IP,每3小时执行一次 scheduler.add_job(scale_ip.redis_ip_filter, 'interval', max_instances=10, seconds=10800)
参考资料:
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - skipped: maximum number of running instances reached (1)
戏子 on 回复 有用(0)
您好,老哥,可以开源一份您的在线接受验证码平台的源码么?
游客R&Q2 on 2021-11-22 16:32:59
ok