通过在 APScheduler 中的多个调度程序之间共享作业存储,我确实解决了这个问题。
官方文档提到
作业存储绝不能在调度程序之间共享
但没有讨论与此相关的问题,有人可以解释一下吗?
并且如果我在生产中部署一个包含 APScheduler 的 Django 应用程序,是否会为每个工作进程创建多个作业存储?
通过在 APScheduler 中的多个调度程序之间共享作业存储,我确实解决了这个问题。
官方文档提到
作业存储绝不能在调度程序之间共享
但没有讨论与此相关的问题,有人可以解释一下吗?
并且如果我在生产中部署一个包含 APScheduler 的 Django 应用程序,是否会为每个工作进程创建多个作业存储?
这有多种原因。在 APScheduler 3.x 中,调度程序没有任何方法可以相互通知作业存储中发生的变化。当调度程序启动时,它会在作业存储中查询要执行的作业,处理它们,然后询问它应该休眠多长时间,直到下一个到期作业。如果另一个调度程序添加了一个将在该唤醒时间之前执行的作业,那么另一个调度程序会很高兴地在该时间之后休眠,因为没有机制可以接收有关新(或更新)作业的通知。
此外,调度程序无法强制执行作业的最大运行实例数,因为它们不与其他调度程序通信。当同一作业同时在多个调度程序进程上运行时,这可能会导致冲突。
这些缺点在即将到来的 4.x 系列中得到解决,共享作业存储的能力可以被认为是其最重要的新功能之一。