首页 > 解决方案 > Celery - 在链组内运行子任务

问题描述

希望一切安好!

问题:我试图在链中运行一组子任务,然后在父级最高级别我有一个围绕链的组。正在执行子任务;但是,在子任务可以吐回它们的结果之前,来自最父组原语的结果就完成了。

例子

--- 我有以下 3 个任务 ---

@app.task
def task_one(seconds):
    time.sleep(seconds)
    return [seconds + 0.1, seconds + 0.2]

@app.task
def task_two(seconds):
    return group(task_three.signature(args=(x,)) for x in seconds)()

@app.task
def task_three(seconds):
    time.sleep(seconds)
    return  {
        'sleep': seconds
    }

---任务是这样调用的---

g = group(
      chain(
         task_one.s(x),
         task_two.s()
      ) for x in range(1, 3)
)
promise = g.apply_async()
print(promise.get())

该函数task_two将创建一组任务 ( task_three) 来执行。运行时,最外层组将完成执行并在task_three任务完成之前返回结果。

知道为什么会这样吗?

标签: pythoncelerycelery-task

解决方案


推荐阅读