是否可以从子任务 Z 访问调用父任务 A 时使用的参数?换句话说,当任务 Z 在链中被调用时,它能否以某种方式访问在任务 A 被触发时调用的参数 V,但它没有通过任务 A 之间的任何中间节点传递和 Z?如果是这样,怎么做到的?
使用 Celery 3.0 和 RabbitMQ 作为结果后端。
最佳答案
我将暂时用“否”来回答我自己的问题——并希望比我更有知识的人会回来提供解决方案。
在更仔细地查看 Celery 文档之后,我认为根本没有一种方法可以访问调用父任务时使用的参数。根据documentation :
During its lifetime a task will transition through several possible states, and each state may have arbitrary metadata attached to it. When a task moves into a new state the previous state is forgotten about..
任务可以处于以下状态之一:待定、已开始、成功、失败、重试和已撤销。对于我的场景,这里的关键似乎是成功状态。我想要做的是,对于给定的成功任务,找到(其中一个)父任务的 ID,然后查看调用父任务的参数。但是,根据文档,处于 SUCCESS 状态的任务不会包含此类数据(因为父任务本身已经成功,因为它已生成子任务):
SUCCESS Task has been successfully executed.
metadata: result contains the return value of the task. propagates: Yes ready: Yes
换句话说,这里似乎有一个硬性限制。即使我可以找到我感兴趣的父任务的 ID,因为它已成功执行,根据定义我将无法访问调用它的参数,因为它只包含返回值(不再是它的返回值)参数)。
关于python - 从 Celery 中的子任务访问父任务的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14923583/