我正在尝试执行以下操作
@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
参数,否则我会得到错误。
如何让结果流向下一个任务?
答案 0 :(得分:2)
您可以直接将其他参数传递给子任务而无需更改任何内容。
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
答案 1 :(得分:1)
您需要稍微更改作业部分:
@shared_task
def job():
chain = (task1.s() | task2.s() | task3.s() )
result = chain().get()
return result
由于执行一个任务取决于它的前一个任务,你不能通过异步应用它来获得任何东西。但是,您可以异步启动作业。
这不是一个好习惯你和should be avoided。