我想在附图中创建任务树。
如果我从一开始就知道N是什么,我就可以使用这段代码:
>>> chain(group(链(As()),group(x(x)中的x为()(),Bs()),链(Cs(),Ds())),Es())()
哪个适用于静态N = 3.(嗯......它确实不起作用 - 由于某种原因,子任务E没有被执行,我不知道为什么)
基本上我在'A'任务中做了一些计算,想要创建'a'任务N次,其中N取决于那些计算。
然后我想调用'B'任务,它收集'a'任务的所有结果。
最后,当'B'和'D'完成时,我想运行'E'。
如果我使用重试,我可以做我想要实现的目标(如果使用重试,你可以创建任何依赖树),这是我不想要的,因为它不是很优雅。
>>> group(A.s(),chain(C.s(),D.s()))
@app.task()
def A(*args):
# calculations
chord(a.s() for i in xrange(N))(B.s())
@app.task()
def B(*args):
# calculations
E.delay()
@app.task(bind=True)
def E(*args):
try:
if D not ready then:
raise Exception()
except Exception as e:
self.retry(countdown=60, exc=e)
所以问题是,如何在不重试的情况下做到这一点?