【问题标题】:Force Celery to run next task in queue?强制芹菜运行队列中的下一个任务?
【发布时间】:2014-08-23 07:58:18
【问题描述】:

有没有办法让 Celery 重新检查主队列中是否有任何任务准备好启动?远程命令add_consumer() 能完成这项工作吗?

原因:我正在运行多个并发任务,这会产生多个子进程。任务完成后,子进程有时需要几秒钟才能完成,因此由于子进程的并发限制已达到最大值,队列中的新任务永远不会启动。而且由于 Celery 不会在子进程完成时再次检查,因此队列会因没有活动任务而停滞不前。因此,我想添加一个定期任务,告诉 Celery 重新检查队列并开始下一个任务。我该如何告诉 Celery?

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    来自the docs

    add_consumer 控制命令将告诉一个或多个工作人员从队列中开始消费。这个操作是幂等的。

    是的,add_consumer 可以满足您的需求。您还可以将其与 periodic task 结合起来,每隔一段时间“重新检查队列并开始下一个任务”(取决于您的需要)

    【讨论】:

    • 没有反对意见。我刚刚删除了我的赞成票,因为您实际上并没有回答我的问题,而只是证实了我的怀疑,即“看起来 add_consumer 完成了”这项工作。
    • 很公平,但这怎么不能回答你的问题呢?您写的问题是:“远程命令 add_consumer() 会完成这项工作吗?”答案是“是的”。请说清楚。 :)
    • 我需要一个真正尝试过并且知道的人的明确回答。文档含糊不清,这就是我首先问的原因。当队列已经被消费时,“从队列开始消费”可能意味着多件事,但它只是暂停,因为已达到并发限制。
    最近更新 更多