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