python - 从 Celery 中的子任务访问父任务的参数

标签 python celery

是否可以从子任务 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/

相关文章:

python - tkinter stipple 选项在 OS X 中行为不当

python - 测试请求中的延迟时间

python - 更好的方法来测试功能

python - celery.utils.log 和 logging 中的 get logger 函数有什么不同?

python - Celery + gevent 只使用一个 CPU 内核

python - Celery 中的顺序任务执行

python - 有什么方法可以使用 Python 访问 OS X wi-fi 数据吗? (例如信号强度)

python - Pandas 索引过滤器比非索引列过滤器慢

django - 在 View 中访问 django celery 结果

python - celery 花中 worker 始终离线