gpt4 book ai didi

python - 在组任务完成之前, celery 链接执行子任务

转载 作者:太空宇宙 更新时间:2023-11-04 05:59:56 25 4
gpt4 key购买 nike

我想做的是执行一组任务,并将组中每个任务的结果发送到另一个任务,然后将所有这些任务的结果发送到一个最终任务。

例如

jobgroup = (
group(tasks.task1.s(p) for p in params) |
tasks.dmap.s(tasks.task2.s())
)

这部分对我来说没问题,但我遇到的问题是,如果我试图将所有结果纳入一项最终任务,例如

mychain = chain(jobgroup | tasks.task3.s())

我看到的是 task3() 被调用,而来自 task2 的任务仍处于待处理状态,方法是打印出它们进入时的状态(以下代码段是我从 task3 函数中打印的内容:

@task()
def task3(input):
for item in input.results:
logger.info(item.status)

记录结果

[2014-09-04 10:48:41,905: INFO/Worker-7] tasks.task3[27053688-3c5c-4ca5-975f-356a66d55364]: PENDING
[2014-09-04 10:48:41,905: INFO/Worker-7] tasks.task3[27053688-3c5c-4ca5-975f-356a66d55364]: PENDING

那么我该如何设置才能在作业组中的所有任务完成之前不调用 task3?

最佳答案

Chord :

和弦由标题和正文组成。 header 是一组必须在调用回调之前完成的任务。和弦本质上是一组任务的回调。

示例:

>>> from celery import chord
>>> res = chord([add.s(2, 2), add.s(4, 4)])(sum_task.s())

您可以使用chord 来完成任务。

from celery import chord, group, chain

task_1 = group(tasks.task1.s(p) for p in params)
task_2 = group(tasks.dmap.s(tasks.task2.s())
task_3 = tasks.task3.s()

workflow = chord(chain([task_1, task_2]))(task_3)

关于python - 在组任务完成之前, celery 链接执行子任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25655802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com