2016-04-28 6 views
0

私は、タスクの状態をカスタム値に更新し、それを読んで値に従っていくつかのロジックを適用する必要があるシナリオを持っています。Cele + 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) 

私はいつもPENDINGまたはSUCCESSのいずれかを取得し、そのいずれかの中間の値がスキップされます更新の呼び出しが確実に行われたとしても、

私はRedisを取得し、ignore_resultオプションはFalseに設定されています。

答えて

1

我々はupdate_stateメソッドのシグネチャを見れば、それは我々が

self.update_state('foo') 

を実行すると、それは状態NoneにTASK_ID fooでタスクを更新しようと、この

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`). 

のように見えます。

代わりに、私たちはfooに現在のタスクのステータスを更新

self.update_state(state='foo') 

を試してみてください。

+0

うん..それはそれを釘付け.... ....ありがとう –

関連する問題