Django Heroku调度程序-为什么将长时间运行的作业排队

Django Heroku调度程序-为什么将长时间运行的作业排队,django,heroku,sysadmin,Django,Heroku,Sysadmin,Heroku调度器的文档中说 “计划作业用于执行短时间运行的任务或将长时间运行的任务排入后台作业队列。任何需要几分钟以上时间才能完成的任务都应使用辅助进程来运行” 如果调度器为这些作业启动一个新的dyno,并且dyno与worker的成本相同,那么将任务添加到队列并让worker进程运行它有什么好处?好吧,我认为这只是一个建议。如果您有一个由调度程序运行的任务,并且您将手动运行此任务(在Heroku管理中),您将得到一个错误-此错误是由超时引起的(因为每个任务都有30秒的限制)。但事实上,这项

Heroku调度器的文档中说

“计划作业用于执行短时间运行的任务或将长时间运行的任务排入后台作业队列。任何需要几分钟以上时间才能完成的任务都应使用辅助进程来运行”


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

好吧,我认为这只是一个建议。如果您有一个由调度程序运行的任务,并且您将手动运行此任务(在Heroku管理中),您将得到一个错误-此错误是由超时引起的(因为每个任务都有30秒的限制)。但事实上,这项任务不会被打断——任务会正确完成


如果您有1个dyno,那么这一个dyno将在您的应用程序中使用Heroku。如果您运行某个计划作业,那么此动态将被用作调度程序->如果您有长时间运行的任务,则您的页面将处于“空闲”状态(直到计划作业完成时,页面才会正常工作)。

这是一种架构最佳实践,即仅调度而不是执行调度程序任务上的间隔任务(或您自己的自定义时钟进程)。本文对此进行了解释,但总而言之,您希望您的计划程序进程/任务尽可能轻,因为它们应该只有一个。当您开始使用执行重载计划时,您经常会遇到计划冲突和不稳定的行为

假设一个间隔作业挂起,或者比预期的时间长很多。如果间隔足够紧,这将开始导致积压,未来的间隔可能会一起被推迟或跳过

此外,尽可能保持组件职责分离是明智的,因为没有单个组件负责正交任务。这是一种常见的设计实践,通过保持调度和执行的独立性反映在计划作业用例中


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

我的理解是,这些过程会产生新的动态.Per和。此外,第一个链接意味着没有30秒的超时