APScheduler 作业 ID:为什么允许作业共享 ID?
APScheduler job IDs: why are jobs allowed to share IDs?
我正在开发一个使用 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
似乎并不能取代作业。
我是否遗漏了一些重要的东西,也许是配置工作商店?
当您的调度程序尚未启动时,它会将作业添加到某些 pending_job 没有验证的列表中,这可能是错误或有意为之,我不知道,但您可以先验证一下启动调度程序,然后添加作业,您将获得 ConflictingIdError
.
我正在开发一个使用 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
似乎并不能取代作业。
我是否遗漏了一些重要的东西,也许是配置工作商店?
当您的调度程序尚未启动时,它会将作业添加到某些 pending_job 没有验证的列表中,这可能是错误或有意为之,我不知道,但您可以先验证一下启动调度程序,然后添加作业,您将获得 ConflictingIdError
.