Celery:在另一个任务之后执行任务,但返回第一个任务的结果

时间:2013-01-08 09:02:03

标签: python celery

有时我需要在任务A之后运行任务B,但返回任务A的结果。查看文档,我尝试过(Avoid launching synchronous subtasks

所以我会使用像这样的链:

@celery.task
def A():
    return 5

@celery.task
def B():
    return 2

def do_all():
    chain = A.s() | B.s()
    chain()
    return result_of_A

但这不起作用。就我而言,我需要:

  • B没有任何参数。它不接受A
  • 的结果
  • 必须在 A完成
  • 后执行
  • 我不需要等待B完成,我不需要它的结果(B必须是异步的?)
  • 如何在do_all中返回A的结果? (A必须同步?)

是否可以使用链或任何其他子任务原语来实现它?

1 个答案:

答案 0 :(得分:0)

我无法用原始方式来做这件事;可能有一个。但是一种可行的方法是,使用任务A中的on_successafter_return处理程序来启动任务B.如果还使用ignore_result选项,则调用任务B真是让人忘掉。