python - 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
似乎并不能取代这项工作。
我是否错过了一些重要的东西,也许是配置工作商店?
解决方案
当您的调度程序尚未启动时,它会将作业添加到一些没有验证的pending_job 列表中,这可能是一个错误或我不知道的意图,但您可以通过首先启动调度程序然后添加您的作业来验证这一点会得到ConflictingIdError
。
推荐阅读
- linux - 循环测试所有 NFS 挂载点
- docker - 使用 Docker 和 NGINX 编辑 nginx.conf 问题
- html - 如何在 xslt 文件中使用 css 选择器?
- android - 为什么我收到“java.lang.String 无法转换为 JSONObject”错误?
- mysql - 如何从消息表中获取最近的唯一用户列表以及来自不同表的用户个人数据
- javascript - 传递键以将循环中的值与参数函数进行比较
- c# - Foreach thread.join,没有按预期工作,如何解决?
- javascript - Html 表格标题不会出现在最大宽度上
- docker - 如何通过 oc edit deploy 在容器内插入 ca-cert
- r - 将信息从行转换为新列