不使用重试的动态任务树

时间:2015-12-04 16:45:22

标签: celery

enter image description here

我想在附图中创建任务树。

如果我从一开始就知道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)

所以问题是,如何在不重试的情况下做到这一点?

0 个答案:

没有答案