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



我正在尝试执行以下操作

@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()

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

如何让结果流向下一个任务?

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

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

由于一个任务的执行依赖于它前面的任务,因此异步应用它不会得到任何东西。 但是,您可以异步启动作业。

这不是好习惯,应该避免。

相关内容

  • 没有找到相关文章

最新更新