链接芹菜任务并将返回从一个任务隐式传递到另一个任务

Cpp*_*ner 3 python celery

我正在尝试执行以下操作

@shared_task
def task1():
    return '1'

@shared_task
def task2(r1):
    return '2'

@shared_task
def task3(r2):
    return 'done'

@shared_task
def job():
    chain = (task1.s() | task2.s() | task3.s() ).apply_async()
    chain()
Run Code Online (Sandbox Code Playgroud)

但是我必须明确给出task2task3论证,否则我会出错。

我该怎么做才能让结果流到下一个任务?

Chi*_*and 5

您可以直接将附加参数传递给子任务而无需更改任何内容。

chain = (task1.s() | task2.s(r1) | task3.s(r2) ).apply_async()
Run Code Online (Sandbox Code Playgroud)

这里 task1 不接受任何参数,task2 接受两个参数,第一个是前一个任务的结果,第二个是r1。task3 也一样。

如果您不需要 task2 中 task1 的结果,那么您可以将 task2 的签名设为不可变。

chain = (task1.s() | task2.si(r1) | task3.s(r2) ).apply_async()
Run Code Online (Sandbox Code Playgroud)

这里 task1 不接受任何参数, task2 只接受一个参数r1。Task3 接受两个参数,第一个是前一个任务的结果,第二个是r2