Python APScheduler缺火测试
我正在尝试使用APScheduler测试失败的任务,但在重新启动APScheduler时,没有看到丢失的任务运行。我已将APScheduler配置如下: scheduler.pyPython APScheduler缺火测试,python,apscheduler,Python,Apscheduler,我正在尝试使用APScheduler测试失败的任务,但在重新启动APScheduler时,没有看到丢失的任务运行。我已将APScheduler配置如下: scheduler.py def configure_scheduler(): jobstores={ 'default':SQLAlchemyJobStore(url=config('DATABASE_url')) } sched=阻塞调度程序() sched.configure(作业存储=作业存储) 计划添加作业( 测试任务, id='te
def configure_scheduler():
jobstores={
'default':SQLAlchemyJobStore(url=config('DATABASE_url'))
}
sched=阻塞调度程序()
sched.configure(作业存储=作业存储)
计划添加作业(
测试任务,
id='test_task',
“间隔”,
小时=1,
联合=正确,
最大实例数=1,
失火时间=360,
replace_existing=True
)
返回时间表
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
调度程序=配置调度程序()
scheduler.start()
当我第一次启动调度程序时,test\u task
将添加到我的Postgres数据库中的apscheduler\u jobs
表中,从我启动调度程序起,下一次运行时间为一小时。然后,我尝试通过以下方式测试缺火:
下一次运行时间
再次设置为距当前时间一小时。下一次运行时的似乎在SQLAlchemy作业库的方法中更新。我见过一个与失火后不运行的持久作业存储任务相关的例子。我见过的大多数解决方案是将misfire\u grace\u time
参数添加到add\u job
。我在上面的配置中尝试过这个,但在调度程序启动时没有运行错过的作业。我是否遗漏了与replace\u现有
和misfire\u grace\u time
参数如何交互有关的内容?我是否需要手动检查任何作业的下一次运行时间
是否在过去,然后在启动计划程序之前运行这些作业
我正在使用APScheduler库的v3.6.1
对于其他上下文,我将在Heroku上部署调度程序,并尝试解决每天至少发生一次的Heroku问题 在APScheduler Gitter聊天室与Alex Grönholm(APScheduler的创建者)聊天后,我能够确定作业在我的数据库中被“覆盖”,因为我在调用添加作业
时有replace_existing=True
。这会导致计划程序每次启动时都替换jobstore中的作业
我的解决方法
在计划程序启动之前,请检查apscheduler\u作业
表中的现有作业
对于数据库中的每个作业,请对照当前时间检查下一次运行时间
。如果下一次运行时间是过去的,请立即运行作业
使用replace_existing=True
像以前一样安排作业
启动调度程序
我尝试了Alex Grönholm(APScheduler的创建者)的建议。启动BackgroundScheduler,添加作业并使主程序运行,同时执行True
循环。我能处理掉那些错失的工作。