如何运行并发AP Scheduler作业?

问题描述 投票:1回答:2

我试图在我的程序中运行多个AP Scheduler作业(包括间隔和cron),但是当我添加具有不同间隔的多个间隔作业时,它们都以最短的间隔执行。例如,如果我添加一个频率为30秒的作业和一个15秒的作业,则两者都将每15秒执行一次。

我的代码如下。如何在不同的时间间隔内正确运行这两个作业?

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ProcessPoolExecutor

executors = {
             'default': {'type': 'threadpool', 'max_workers': 20},
             'processpool': ProcessPoolExecutor(max_workers=5)
            }
job_defaults = {
                'coalesce': False,
                'max_instances': 3
               }
sched = BackgroundScheduler(executors=executors, job_defaults=job_defaults, timezone="EST")

sched.start()
sched.add_job(lambda: module.handle(self.profile, mic), 'interval', id=module.__name__, seconds=15)
sched.add_job(lambda: module2.handle(self.profile, mic), 'interval', id=module2.__name__, seconds=30)
atexit.register(lambda: sched.shutdown(wait=False))
python apscheduler
2个回答
0
投票

你添加2个工作

sched.add_job(lambda: module.handle(self.profile, mic), 'interval', id=module.__name__, seconds=15)
sched.add_job(lambda: module2.handle(self.profile, mic), 'interval', id=module.__name__, seconds=30)

id=module.__name__的dublicate ID。你需要自己指定ID吗? Apscheduler可以为您做到这一点。


0
投票

事实证明这是我正在使用的lambda的一个问题。我通过添加如下所示的args参数删除了lambda。

sched.add_job(module.handle, 'interval', args=[self.profile, mic], id=module.__name__, seconds=15)
sched.add_job(module2.handle, 'interval', args=[self.profile, mic], id=module.__name__, seconds=30)
© www.soinside.com 2019 - 2024. All rights reserved.