Celery Chord Callback错误

时间:2014-06-26 08:28:25

标签: python celery

假设我有这样的芹菜代码:

@celery.task()
def A(a):
    try:
        .......
        .......
    except Exception,e:
        raise

@celery.task()
def B(b):
    try:
        .......
        .......
    except Exception,e:
        raise

def C(c):
    try:
        .......
        .......
    except Exception,e:
        raise

def final():
    callback = C.s()
    header = [A.s(something), B.s(something)]
    result = chord(header)(callback)
    result.get()

现在,当我尝试运行任务final()时,我总会收到类似C.s() takes exactly 1 argument (2 given)的错误,因为回调会应用标头中每个任务的返回值。那我怎么能解决这个问题,以便任务C()运行良好????

1 个答案:

答案 0 :(得分:2)

您可以使用immutable tasks创建独立的任务,而不是转发结果。

def final():
    # C needs an argument, note the use of the shortcut `si`
    callback = C.si(something)
    header = [A.s(something), B.s(something)]
    result = chord(header)(callback)
    result.get()

完全注意事项,如果您正在运行Python 2.6+或Python 3.x需要,请使用except Exception as e(请参阅here for more details)。