APScheduler。关闭具有任何非内存存储的调度程序的最佳实践是什么?

时间:2018-12-19 10:38:30

标签: python distributed-system apscheduler

我需要运行分发到许多计算机的调度程序,并且只有一个点来存储作业。为此,我使用redis,我的代码如下:

ng build --prod

当我将作业放入调度程序中并调用jobstores = {'default': {'type': 'redis'}} scheduler = BlockingScheduler(jobstores=jobstores) scheduler.add_job(...) 时,它会在Redis中添加作业。但是,当我运行调度程序的另一个实例或停止当前实例的另一个实例并再次运行它时,调度程序会在redis中添加更多作业(不做清理)。

因此,我有这个问题。做这种事情的最佳实践是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

在为此用途添加新作业时,必须使用replace_existing=True选项。

来自documentation

  

如果在应用程序初始化期间在持久性作业存储中安排作业,则必须定义该作业的显式ID并使用replace_existing=True,否则您将获得该作业的新副本每次您的应用程序重新启动!