2012-01-16 14 views
10

utilizzare django-sedano e hanno compito in questo modo:Task stato e django-sedano

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

Io uso guscio Django per eseguire compiti:

python manage.py shell 

r = tasks.TestTask().delay() 

Da registro sedano vedo che compito è eseguito:

[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 

Tuttavia quando posso controllare lo stato compito da inferno ho sempre avuto ATTESA:

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

anche se l'attività è ben eseguita.

Perché questo succede?

risposta

10

Quale versione di sedano stai usando? Ho notato che sono davvero in ritardo per questa festa, ma nel caso questo aiuti qualcuno in futuro. Se l'attività è impostata su ignore_result (che è l'impostazione predefinita nella versione più recente) rimarrà su PENDING e non andrà a SUCCESS.

loro documentazione qui,

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

È possibile vedere voi stessi here, se avete altre domande fatemi sapere.

** Inoltre un'altra nota, anche se si è ignore_result impostata su true è sempre possibile aggiornare manualmente lo stato in questo modo,

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

qualcosa del genere per le barre di avanzamento - Anche sulla pagina di documentazione di sedano .

+0

Grazie, signore! –