2016-04-28 55 views
0

我有一個場景,我需要將任務的狀態更新爲自定義值,然後根據該值讀取並應用一些邏輯。Celey + Python忽略update_state調用

這是我的芹菜配置:

celery = Celery(app.import_name, 
       backend='redis://127.0.0.1:6379/0', 
       broker='redis://127.0.0.1:6379/0') 
celery.conf.update(CELERY_TASK_SERIALIZER='pickle', 
        CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/0', 
        CELERY_IGNORE_RESULT=False, 
        CELERY_ALWAYS_EAGER=False, 
        CELERY_ACCEPT_CONTENT=['pickle'], 
        CELERY_RESULT_SERIALIZER='pickle') 

所以我使用的Redis +泡菜基本。更新狀態的調用是由像

self.update_state('foo') 

但是當我打電話給我的任務,這樣,檢查狀態:

result = task.delay(*args) 
print(result.state) 

我總是要麼PENDINGSUCCESS,所以任何中間值是跳過,即使打電話更新肯定是

如果我檢查結果後端類型,我得到Redis,並且ignore_result選項設置爲False,我沒有在這裏找到的建議修復工作。

回答

1

如果我們看一下update_state方法的簽名,它看起來像這樣

def update_state(self, task_id=None, state=None, meta=None): 
    """Update task state. 

    :keyword task_id: Id of the task to update, defaults to the 
         id of the current task 
    :keyword state: New state (:class:`str`). 
    :keyword meta: State metadata (:class:`dict`). 

當我們運行

self.update_state('foo') 

它試圖更新TASK_ID foo一個任務狀態None

相反,我們應該儘量

self.update_state(state='foo') 

哪些更新當前任務狀態foo

+0

y ..釘了它....非常感謝 –