2017-01-23 70 views
0

因此,我現在一直在使用celery v3.x並考慮從正式遷移到v4之後遷移到v4。現在,我正在使用通過PyPI提供的v4.0.2。有兩個版本數不匹配,但讓我困惑的一個是這樣的:使用redis後端的芹菜v4組任務行爲

這是我的任務文件:

from celery import group, chord 
from worker import app 


@app.task(name='task') 
def task(i): 
    return i 


@app.task(name='remaining') 
def dummy(result): 
    print result 

@app.task(name='mainTask') 
def mainTask(): 
    groupTask = group([task.s(i) for i in range(0,10)]) 
    job = chord(groupTask, dummy.s())() 
    return job 

當我打電話mainTask,隨後組任務也得到執行,但當我嘗試通過dummy打印此任務的結果時,結果順序變得混亂。輸出示例如下:

[0, 1, 2, 3, 4, 8, 6, 9, 7, 5] 

奇怪的是,只有當結果後端是redis時纔會發生這種情況。在使用amqp時,結果將按照如下精確順序顯示:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

P.S.,此行爲在舊版本的芹菜中不存在。 Redis以及amqp以正確的順序返回結果。有什麼我失蹤?

回答

1

爲任何可能面臨同樣問題的人發佈這個答案。

芹菜裏的redis後端代碼是這樣編寫的,只要它結束,結果就會被推送到一個redis列表,從而改變順序。

我已經在芹菜的github問題頁面上發佈了相同的查詢,並從其中一個貢獻者處獲得了answer