谁在celery-rabbitmq中处理任务依赖性

时间:2017-06-14 03:08:12

标签: rabbitmq celery celery-task

我真的很困惑这里作为Celery的新手,并希望在客户端(ipython)使用Celery Canvas(工作流)原语(如Chain,Chord)和客户端(ipython)提交DAG时,对芹菜与消息代理如何处理任务依赖关系的一些输入基。

假设我有一个DAG,其中A - > (B,C) - > D(Diamond DAG)其中A将首先运行,然后是B和C并行运行,B和C的输出将用作D中的输入。

我能够想出一个DAG,即

wf = (A.s(2, 2) | group(B.s(), C.s(25)) | D.s(1000)).delay()

我的理解是1)客户端提交DAG 2)Celery将此DAG转换为消息(通常使用JSON)3)将此消息发送到消息代理4)消息代理对依赖性有一些了解吗? (不确定)并基于依赖关系将任务放入队列5中。已订阅队列的工作人员接受任务并执行。

我很困惑这里是谁,以确保工作人员根据依赖性执行任务。芹菜工人是否对依赖有所了解?经纪人是否有某种类型的元数据管理?

此处的任何输入都将受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

实际上芹菜使用kombu作为信息传递机制,并且芹菜做不同工作的芹菜的依赖性很少,使芹菜成为最终用户/开发者不了解许多/多样化任务的高级框架。你只需要使用芹菜来完成任务和其他工作,并在特定的库中使用kombu,billiard等来完成他们的任务。您最好检查一下芹菜的源代码,以获得更多的洞察力。