Heroku Scheduler 的文档说



https://devcenter.heroku.com/articles/scheduler#longrunning_jobs

如果调度程序为这些作业启动一个新的 dyno,并且 dyno 与工作人员的成本相同,那么将任务添加到队列并让工作进程运行它有什么好处?

最佳答案

仅在调度程序任务(或您自己的自定义时钟进程)上调度而不执行间隔任务是一种架构最佳实践。 scheduled jobs 文章中解释了这样做的动机,但总而言之,您希望调度程序进程/任务尽可能轻量级,因为应该只有其中之一。当您开始用执行重载调度时,您经常会遇到调度冲突和不稳定的行为。

想象一下,一项间隔作业挂起,或花费的时间比预期的要长得多。如果您的时间间隔足够紧,这将开始导致积压,并且 future 的时间间隔可能会一起推迟或跳过。

此外,保持组件职责尽可能分离是明智的 - 不要让单个组件负责正交任务。这是一种常见的设计实践,通过保持调度和执行的独立性反射(reflect)在调度作业用例中。

撇开最佳实践不谈,如果您处于开发或引导模式并了解上述后果,您当然可以选择忽略此类建议并在调度程序任务中运行所有内容。请注意难以调试的作业冲突或明显的重复。

关于django - Heroku Scheduler - 为什么要排队长时间运行的作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11134070/

10-14 19:05
查看更多