APScheduler作业ID:为什么允许作业共享ID?

时间:2018-08-10 13:48:15

标签: python apscheduler

我正在开发一个使用BackgroundScheduler的Flask应用程序。该应用程序的一项功能是发送请求,该请求计划在特定日期安排工作,但前提是该日期已经没有工作。因此,我认为我可以依靠job id参数来实现唯一性……但是,看起来它不一定必须如此。

这是一个非常简单的示例,将两个具有相同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似乎并不能代替工作。

我是否缺少一些重要的东西,也许是在配置作业库?

1 个答案:

答案 0 :(得分:1)

当您的调度程序尚未启动时,它会将作业添加到一些未通过验证的“ pending_job”列表中,这可能是错误或故意的,但您可以先启动调度程序然后添加您将获得ConflictingIdError的工作。