假设我有这样的芹菜代码:
@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()运行良好????
答案 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)。