我刚刚开始在 Django 项目中使用 celery,并且有点陷入这个特定问题:基本上,我需要将长期运行的任务分发给不同的工作人员。该任务实际上分为几个步骤,每个步骤都需要相当长的时间才能完成。因此,如果某个步骤失败,我希望 celery 使用同一工作人员重试此任务,以重用已完成步骤的结果。我知道芹菜使用路由将任务分发到某些服务器,但我找不到有关此特定问题的任何信息。我使用 RabbitMQ 作为我的经纪人。
您可以让每个 celeryd 实例从以工作线程的主机名命名的队列中使用:
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)