【问题标题】:Prioritise celery queues/tasks优先处理 celery 队列/任务
【发布时间】:2018-06-10 23:05:32
【问题描述】:

我对芹菜及其工作原理有基本的了解。在我当前的项目中,我遇到了对任务进行优先级排序的需要。我的意思是,如果有两种任务,比如 celery 队列中的 A 和 B,则 celery 应该优先考虑任务 B,而不管哪个任务在队列的头部。有没有办法做到这一点?

队列优先级对我来说也很好。这意味着我可以创建 2 个不同的队列,比如 high_priority_queue 和 low_priority_queue,而 celery 应该始终先执行 high_priority_queue 中的任务,然后再执行 low_priority_queue。

我也知道我们可以为两个队列分配不同的工作人员,但这意味着两个队列中的任务是同时执行的。我需要先执行 high_priority_queue 中的任务。有什么想法吗?

谢谢

【问题讨论】:

    标签: python python-3.x celery


    【解决方案1】:

    通常建议使用具有多个队列的多工作者方法,但正如您所指出的,低优先级队列/工作者将在高优先级工作者旁边同时工作。如果您有很多小任务想要很快执行,这是一个有趣的设置,因此您将它们放在高优先级队列中,而较长的任务被推入低优先级队列。你也可以有一个设置,你只需为高优先级工作人员提供更多资源(或更好的机器)。

    由于您想要不同的解决方案,我建议为 apply_async 使用 priority 参数。正如a different question I answered recently 中指出的那样,您确实需要一些设置,并且它仅适用于某些经纪人。 (对于 RabbitMQ,它从 3.5.0 版开始工作。)在您的队列上设置了 x-max-priority 以及引用的答案中指出的其他设置后,您可以简单地将优先级放在这样的任务上:

    your_task.apply_async(queue="your_queue_that_can_handle_priority", priority=10)
    

    【讨论】:

      最近更新 更多