Python APScheduler - 跳过:达到最大运行实例数

32

我正在使用Python apscheduler(版本3.0.1)每秒执行一个函数。

代码:

scheduler = BackgroundScheduler()
scheduler.add_job(runsync, 'interval', seconds=1)
scheduler.start()

大部分时间都正常工作,但有时我会收到这个警告:

WARNING:apscheduler.scheduler:Execution of job "runsync (trigger: interval[0:00:01], next run at: 2015-12-01 11:50:42 UTC)" skipped: maximum number of running instances reached (1)

1.这是执行该方法的正确方式吗?

2.这个警告是什么意思?它是否会以任何方式影响函数内部任务的执行?

3.如何处理这个问题?

4个回答

37

这意味着该任务执行时间超过了一秒钟,并且默认情况下给定作业只允许一个并发执行。如果不知道该任务的具体内容,我无法告诉您如何处理此问题。


嗨,Alex,任务检查FTP位置内的文件夹,如果找到该文件夹,则开始从这些文件夹中获取数据,这可能需要长达24小时。 - boyfromnorth
5
由于这个过程需要超过一秒钟的时间,你会经常看到这些警告。但是你不需要对此采取任何行动。 - Alex Grönholm

24

增加 max_instances

如果特定的使用情况允许,只需按照下面所示增加 max_instances

import apscheduler.schedulers.background

scheduler = apscheduler.schedulers.background.BackgroundScheduler({'apscheduler.job_defaults.max_instances': 2})

有三种apscheduler配置样式,这些在文档中有描述。上面是字典/JSON样式,这里是参数样式:

import apscheduler.schedulers.background

scheduler = apscheduler.schedulers.background.BackgroundScheduler(job_defaults={'max_instances': 2})

12

如果您想同时运行相同作业的多个实例并避免警告,您可以在调度程序的add_job()方法中包括max_instances参数。默认值为1。


2

我相信我的任务没有超过时间间隔。我只是按照这个答案来操作的,然后切换到apscheduler==2.1.2,就像这里建议的一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接