2014-06-26 67 views
0

假設我有一個芹菜這樣的代碼:芹菜和絃回調錯誤

@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() 

現在,當我嘗試運行任務的最後()我總是得到一個錯誤,如C.s() takes exactly 1 argument (2 given)因爲回調與返回值應用標題中的每個任務。所以我如何解決這個問題,使任務C()運行良好?

回答

1

您可以使用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的要求(見here for more details)使用except Exception as e