2012-01-16 19 views
10

Używam Django seler i mają zadanie takiego:Zadanie państwa i django-seler

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") 

Używam django skorupę, aby uruchomić zadanie:

python manage.py shell 

r = tasks.TestTask().delay() 

Z dziennika selera widzę, że zadanie jest wykonany:

[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 

jednak kiedy sprawdzić stan zadania z piekła zawsze dostaje Oczekujące:

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

mimo że zadanie jest dobrze wykonane.

Dlaczego tak się dzieje?

Odpowiedz

10

Jaką wersję selera używasz? Zauważyłem, że naprawdę spóźniłem się na tę imprezę, ale na wypadek, gdyby to pomogło komuś w przyszłości. Jeśli zadanie zostanie ustawione na ignore_result (domyślnie w najnowszej wersji), pozostanie ono w OCZEKIWANIU i nie przejdzie do SUCCESS.

Ich dokumentacja tutaj,

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

Można go samemu here zobaczyć, jeśli masz jakiekolwiek inne pytania, daj mi znać.

** Również inna nuta, nawet jeśli ignore_result wartość true zawsze można ręcznie zaktualizować stan jak tak,

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

Coś w tym rodzaju na paski postępu - również znaleźć na stronie dokumentacji seler za .

+0

Dziękuję, niezły panie! –

Powiązane problemy