文章内容

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)


参考资料:

1、apscheduler提示maximum错误


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - skipped: maximum number of running instances reached (1)

分享到:

发表评论

评论列表

user-ico

戏子 on 回复 有用(0

您好,老哥,可以开源一份您的在线接受验证码平台的源码么?

游客R&Q2 on 2021-11-22 16:32:59

ok