如何使用同一个工人重新进行芹菜重试?

时间:2012-01-06 04:04:19

标签: python django rabbitmq celery

我刚刚在Django项目中开始使用芹菜,并且有点坚持这个特殊问题:基本上,我需要将长期运行的任务分配给不同的工作人员。该任务实际上分为几个步骤,每个步骤都需要相当长的时间才能完成。因此,如果某个步骤失败,我希望芹菜使用同一个工作人员重试此任务,以重用已完成步骤的结果。我知道芹菜使用路由将任务分配给某个服务器,但我找不到任何关于这个特定问题的信息。我使用RabbitMQ作为我的经纪人。

1 个答案:

答案 0 :(得分:11)

您可以让每个celeryd实例都使用以worker名称命名的队列消耗:

celeryd -l info -n worker1.example.com  -Q celery,worker1.example.com

将主机名设置为worker1.example.com,并将使用名为相同的队列以及默认队列(名为celery)。

然后将任务指向特定的工作人员,您可以使用:

task.apply_async(args, kwargs, queue="worker1.example.com")

类似于直接重试:

task.retry(queue="worker1.example.com")

或将重试指向同一个工作人员:

task.retry(queue=task.request.hostname)