首页 > 解决方案 > APScheduler 作业 ID:为什么允许作业共享 ID?

问题描述

我正在开发一个使用BackgroundScheduler. 该应用程序的一项功能是发送在特定日期安排工作的请求,但前提是该日期还没有工作。所以我想我可以依靠 jobid参数是独一无二的......但是,它看起来不一定是。

id这是一个向调度程序添加两个相同的作业的超级简单示例:

from apscheduler.schedulers.background import BackgroundScheduler

scheduler = BackgroundScheduler()


def hello():
    print "Hello!"


def goodbye():
    print "Goodbye!"

scheduler.add_job(hello, trigger='interval', seconds=5, id='1')
scheduler.add_job(goodbye, trigger='interval', seconds=5, id='1')

print scheduler.get_jobs()
print scheduler.get_job('1')

哪个输出

[<Job (id=1 name=hello)>, <Job (id=1 name=goodbye)>]
hello (trigger: interval[0:00:05], pending)

由于 ID 冲突,我预计这会出错。但相反,这两个作业都已注册,并且在查询特定作​​业 ID 时,仅返回第一个。

此外,将replace_existing参数设置为True似乎并不能取代这项工作。

我是否错过了一些重要的东西,也许是配置工作商店?

标签: pythonapscheduler

解决方案


当您的调度程序尚未启动时,它会将作业添加到一些没有验证的pending_job 列表中,这可能是一个错误或我不知道的意图,但您可以通过首先启动调度程序然后添加您的作业来验证这一点会得到ConflictingIdError


推荐阅读