在 APScheduler 中共享作业存储有什么问题?

问题描述

我确实遇到了在 APScheduler 中跨多个调度程序共享作业存储时出现的问题。

official documentation 提及

永远不能在调度程序之间共享作业存储

但不讨论与此相关的问题,有人可以解释一下吗?

此外,如果我在生产中部署包含 APScheduler 的 Django 应用程序,是否会为每个工作进程创建多个作业存储?

解决方法

这有多种原因。在 APScheduler 3.x 中,调度程序没有任何方法可以就作业存储中发生的更改相互发送信号。当调度程序启动时,它会在作业存储中查询要执行的作业,处理它们,然后询问它在下一个到期作业之前应该休眠多长时间。如果另一个调度程序添加了一个将在该唤醒时间之前执行的作业,另一个调度程序会很高兴地在该时间之后休眠,因为没有机制可以接收有关新(或更新)作业的通知。

此外,调度程序无法强制执行作业的最大运行实例数,因为它们不与其他调度程序通信。当同一个作业同时在多个调度程序进程上运行时,这可能会导致冲突。

这些缺点在即将推出的 4.x 系列中得到解决,共享作业存储的能力可以被认为是其最重要的新功能之一。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...