将父任务参数传递给所有Celery子任务

4

假设有以下任务:

@app.task
def task1(v1, v2):
    return "val3"

@app.task
def task2(v1, v2, v3):
    return "val4"

@app.task
def task3(v1, v2, v3):
    return "val4"

考虑以下工作流程:

workflow = chain(
    task1.s(),
    group(
        task2.s(),
        task3.s()
    )
)

result = workflow.delay("val1", "val2")

我该如何让celery将原始参数val1val2传递给组内的task2task3。 只有task1的结果被传递。

1个回答

4

task.s() 只是一个签名 (一个部分函数)。如果你需要,随时可以向它传递一些参数。

因此,你可以按照以下工作流程进行操作。

x = 'my first arg'
y = 'my second arg'

workflow = chain(task1.s(x, y), group(task2.s(x, y), task3.s(x, y)))
result = workflow.delay()

还需要注意的是,第一个任务的结果将作为下一个任务的第一个参数传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接