例如:
(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?
- 我可以使用工作流来解决这个问题吗?
使用变量存储计算值,并在条件中使用变量。
ta = task_a.s()
tb = task_b.s()
tc = task_c.s()
if (ta | tb) and (ta | tc)
您可以使用芹菜工作流程,方法是使用group
基元:
鉴于您的芹菜应用程序已定义并命名为应用程序,您将必须创建一个新任务,允许执行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()