2014-07-01 12 views
6

Nel progetto, provo a eseguire il polling task.state di un'attività a esecuzione lunga e ad aggiornare il suo stato di esecuzione. Ha funzionato nello sviluppo, ma non funzionerà quando sposto il progetto sul server di produzione. Continuavo a ricevere "PENDING" anche se riesco a vedere il compito iniziato su fiore. Tuttavia, posso ancora ottenere i risultati aggiornati al termine dell'attività, che quando task.state == 'SUCCESS'. Io uso python 2.6, Django 1.6 e Celery 3.1 nella produzione, risultato il backend AMQP.AsyncResult (task_id) restituisce lo stato "PENDING" anche dopo l'avvio dell'attività

in un'altra nota, fiore mostra sempre lo stato dei lavoratori offline, ma lo stato delle attività era corretto. Quando si utilizzano gli eventi di sedici 3.1.12 (Cipater), mostra lo stato corretto del lavoratore.

risposta

1

Probabilmente è correlato all'impostazione CELERY_TRACK_STARTED. Citando la documentazione:

CELERY_TRACK_STARTED

Se vero il compito segnalerà il suo status di “ha iniziato” quando il compito viene eseguito da un lavoratore. Il valore predefinito è Falso in quanto il normale comportamento consiste nel non segnalare tale livello di granularità . Le attività sono in attesa, terminate o in attesa di essere ripetute . Avere uno stato "avviato" può essere utile quando ci sono attività in esecuzione lunghe ed è necessario segnalare quale attività è attualmente in esecuzione.

Forse hai CELERY_TRACK_STARTED = True nelle impostazioni di sviluppo, ma non in produzione?

+1

Ho impostato "CELERY_TRACK_STARTED = True" nelle mie impostazioni.py e ho impostato celeryconfig.py con os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'mysite.settings'). Il problema è che AsyncResult (task_id) .state restituisce sempre lo stato "PENDING", quindi il mio modello non può aggiornarsi a "STARTED" all'avvio dell'attività. Ma sia il monitoraggio degli eventi di fiori che di sedano ha mostrato che l'attività è iniziata correttamente. Molto confuso. – user3795121

+0

Puoi eseguire il terminale in cui la tua produzione sta eseguendo 'controllo di sedici controlli conf --app your_app_name' solo per verificare se l'impostazione' CELERY_TRACK_STARTED' fosse ben caricata? –

+0

Questo è il problema! app.conf non viene aggiornato finché non lo imposto esplicitamente in tasks.py. Immagino che os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'mysite.settings') non abbia funzionato. Sono ancora confuso sul motivo per cui è successo. – user3795121

Problemi correlati