优先考虑芹菜队列/任务

时间:2017-12-31 07:12:08

标签: python python-3.x celery

我对芹菜的基本了解及其运作方式。在我目前的项目中,我遇到了确定任务优先级的需求。我的意思是,如果在芹菜队列中有两种任务,比如A和B,芹菜应该优先考虑任务B,而不管队列的头部是哪个任务。有没有办法做到这一点?

队列优先顺序对我来说也没问题。这意味着我可以创建2个不同的队列,比如high_priority_queue和low_priority_queue,芹菜应该首先执行high_priority_queue中的任务,然后转向low_priority_queue。

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

由于

1 个答案:

答案 0 :(得分:1)

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

由于您希望使用其他解决方案,我将为priority建议apply_async参数。你需要对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)