芹菜链/组工作流程和错误处理

时间:2016-03-21 19:15:44

标签: python celery

我正在尝试使用celery设置工作流,该工作流创建并行运行的任务组,按特定顺序执行组。使用Celery v3.1.20和redis作为后端。每个组中的某些任务都可以失败,其他步骤并不真正依赖于每个任务都能成功完成工作流程。

这样的事情:

@celery_app.task(name="tasks.chordfinisher")
def chordfinisher(*args, **kwargs):
    return "ok"


@celery_app.task(name="tasks.test_task")
def test_task(idx):
    t = int(idx[5:])
    if not t % 3:
        raise ValueError
    time.sleep(random.random() * 1.5)
    logging.info('[%s] begin' % idx)


def test_chain():
    g1 = group(test_task.si("foo::" + str(i)) for i in xrange(10))
    g2 = group(test_task.si("bar::" + str(i)) for i in xrange(10))

    step1 = chord(g1, chordfinisher.si())
    step2 = chord(g2, chordfinisher.si())

    # need to wait for all of step1's tasks to COMPLETE 
    # before starting step2
    workflow = (step1 | step2)
    workflow()

Its not possible to sync on groups(也是this question)所以这就是为什么我用无意义的回调使它们成为和弦。问题是,当其中一个任务在第一个组中失败时,链中的后续组(上面的step2)不会执行。有没有办法告诉芹菜继续进行?

0 个答案:

没有答案