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

What's the problem with sharing job stores in APScheduler?

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

official documentation提到

Job stores must never be shared between schedulers

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

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

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

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

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