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.
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
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? –
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