skipped: maximum number of running instances reached (1)

Python 的 apscheduler 今天出现

  skipped: maximum number of running instances reached (1)

问题产生的原因:

  前一个任务未完成,

  在只有一个线程的情况下,max_instances 默认值为 1

解决方法:

  调整APScheduler使用的线程池大小来增加并发处理任务的能力

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.executors.pool import ProcessPoolExecutor
from jobs.job import deal_jobs
# 创建调度器
executor = {
   'default': ThreadPoolExecutor(10),  # 默认线程数
   'processpool': ProcessPoolExecutor(3)  # 默认进程
}
job_defaults = {
    coalesce': False,
    'max_instances': 3
}
scheduler = BackgroundScheduler(executors=executor,job_defaults=job_defaults)
scheduler = BackgroundScheduler(executors={'default': executor})
scheduler.add_job(deal_jobs, 'interval', seconds=20)
# 启动调度器
scheduler.start()

说明:

  coalesce 是否合并执行

    由于某个原因导致某个任务积攒了N次没有执行。

    coalesce=True,下次恢复运行的时候,会只执行一次

    coalesce=False,不会合并,会N次全部执行

  max_instances 最大实例数

    同一个任务同一时间最多只能有N个实例在运行

合理设置任务的执行时间

如果任务执行时间过长,会出现等待任务完成,而无法处理其他任务

可以将执行时间长的任务分解,分解为多个子任务,并分配到多个调度器中,每个调度器只需处理一部分子任务,这样可以提高整体的任务并发性能

posted @ 2024-05-13 23:39  慕尘  阅读(157)  评论(0编辑  收藏  举报