我正在尝试执行以下操作
@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
。任务 3 也一样。
如果你不需要任务 2 中任务 1 的结果,那么你可以将任务 2 的签名设置为不可变的。
chain = (task1.s() | task2.si(r1) | task3.s(r2) ).apply_async()
这里 task1 不接受任何参数,task2 只接受一个参数r1
。Task3 接受两个参数,第一个是上一个任务的结果,第二个参数是r2
您需要稍微更改一下工作部分:
@shared_task
def job():
chain = (task1.s() | task2.s() | task3.s() )
result = chain().get()
return result
由于一个任务的执行依赖于它前面的任务,因此异步应用它不会得到任何东西。 但是,您可以异步启动作业。
这不是好习惯,应该避免。