2

是否可以从其子任务 Z 访问调用父任务 A 的参数?换句话说,当 Task Z 在链中被调用时,它能否以某种方式访问​​在 Task A 被触发时调用的参数V ,但该参数没有通过任务 A 和 Z 之间的任何中间节点传递?如果是这样,怎么办?

使用带有 RabbitMQ 的 Celery 3.0 作为结果后端。

4

1 回答 1

1

我将暂时用“不”来回答我自己的问题——希望比我更有知识的人会回来提供解决方案。

在仔细查看了 Celery 文档之后,我认为根本没有办法访问调用父任务的参数。根据文档

在其生命周期中,任务将通过几种可能的状态进行转换,并且每个状态都可能附加任意元数据。当一个任务进入一个新状态时,之前的状态就会被遗忘。

任务可以处于以下状态之一:Pending、Started、Success、Failure、Retry 和 Revoked。对于我的场景,这里的关键似乎是 Success 状态。我想要做的是,对于给定的成功任务,找到(其中一个)父任务的 id,然后查看调用父任务的参数。但是,根据文档,SUCCESS 状态的任务将不包含此类数据(因为父任务本身已经成功,只要它产生了子任务):

SUCCESS 任务已成功执行。

metadata:result 包含任务的返回值。传播:是 准备好:是

换句话说,这里似乎有一个硬性限制。即使我可以找到我感兴趣的父任务的 ID,因为它已成功执行,根据定义,我将无法访问调用它的参数,因为它只包含返回值(不再是它的论据)。

于 2013-02-18T16:17:09.207 回答