2012-01-16 52 views
10

を私はジャンゴ・セロリを使用して、このようにタスクを持っている:私はタスクを実行するためにDjangoのシェルを使用しタスクの状態とDjango-セロリ

class TestTask(Task): 
    name = "enabler.test_task" 

    def run(self, **kw): 
     debug_log("begin test task") 
     time.sleep(5) 
     debug_log("end test task") 

    def on_success(self, retval, task_id, args, kwargs): 
     debug_log("on success") 

    def on_failure(self, retval, task_id, args, kwargs): 
     debug_log("on failure") 

:セロリログから

python manage.py shell 

r = tasks.TestTask().delay() 

を私はそのタスクがある見ます実行:しかし

[2012-01-16 08:13:29,362: INFO/MainProcess] Got task from broker: enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] 
[2012-01-16 08:13:29,390: DEBUG/PoolWorker-3] begin test task 
[2012-01-16 08:13:34,389: DEBUG/PoolWorker-3] end test task 
[2012-01-16 08:13:34,390: DEBUG/PoolWorker-3] on success 
[2012-01-16 08:13:34,390: INFO/MainProcess] Task enabler.test_task[e2360811-d003-45bc-bbf8-c6fd5692c32c] succeeded in 5.00004410744s: None 

を私は地獄からのタスクの状態をチェックするとき、私はいつも持ってPENDING:

>>> r = tasks.TestTask().delay() 
>>> r 
<AsyncResult: e2360811-d003-45bc-bbf8-c6fd5692c32c> 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 
>>> r.state 
'PENDING' 

タスクは正常に実行されますが、

これはどうしてですか?

答えて

10

セロリのどのバージョンをお使いですか?私は本当にこのパーティーに遅れているが、これが将来誰かを助ける場合には気づく。タスクがignore_result(デフォルトでは最新バージョン)に設定されている場合は、PENDINGのままでSUCCESSにはなりません。

ここで彼らのドキュメント、

@celery.task(ignore_result=True) 
def mytask(...) 
    something() 

あなたが他の質問がある場合は私に知らせて、それを自分hereを表示することができます。

**はまた別のノート、あなたがtrueに設定ignore_resultしている場合でも、あなたはいつも手動

from celery import current_task 
current_task.update_state(state='PROGRESS', meta={'description': 'Doing some task', 'current': 59, 'tota': 73}) 

、そのような状態を更新することができますプログレスバーのような性質の何か - また、セロリのマニュアルページにあり。

+0

ありがとうございました。 –

関連する問題