我正在尝试执行以下操作
@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()
但我必须显式地给出 task2
和 task3
参数,否则我会出错。
我该怎么做才能让结果流向下一个任务?
最佳答案
您可以直接将附加参数传递给子任务而无需更改任何内容。
chain = (task1.s() | task2.s(r1) | task3.s(r2) ).apply_async()
这里 task1 不接受任何参数,task2 接受两个参数,第一个是前一个任务的结果,第二个是 r1
。 task3 也一样。
如果您不需要 task2 中 task1 的结果,那么您可以将 task2 的签名设为不可变。
chain = (task1.s() | task2.si(r1) | task3.s(r2) ).apply_async()
这里 task1 不接受任何参数,task2 只接受一个参数 r1
。 Task3 接受两个参数,第一个是前一个任务的结果,第二个是 r2
关于python - 链接 celery 任务并隐式地将返回值从一个任务传递到另一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998436/