两个其他任务共享第一个任务的结果

时间:2014-12-19 09:17:18

标签: python celery

例如:

(task_a.s() | task_b.s()) and (task_a.s() | task_c.s())  

task_b and task_c share the result of task_a. 
  • 我怎么只能一次计算task_a?
  • 我可以使用工作流来解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

使用变量存储计算值并在条件中使用变量。

ta = task_a.s()
tb = task_b.s()
tc = task_c.s()
if (ta | tb) and (ta | tc)  

答案 1 :(得分:0)

您可以使用芹菜工作流程,使用group原语:

鉴于您的芹菜应用程序已定义且命名为app,您必须创建一个允许执行and操作的新任务

from celery import group

@task
def merge_results(results)
    return all(results)

然后,您的工作流程将是:

(ta.s() | group(tb.s(), tc.s()) | merge_results.s()).apply_async().get()