Risposte:
Dai documenti :
$ celery -A proj purge
o
from proj.celery import app
app.control.purge()
(EDIT: aggiornato con il metodo corrente.)
redis-cli KEYS "celery*" | xargs redis-cli DEL
che ha funzionato per me. Questo cancellerà tutte le attività memorizzate sul back-end redis in uso.
celery purge
(all'interno del relativo ambiente virtuale). Ooops - c'è una risposta con la stessa di seguito ..... stackoverflow.com/a/20404976/1213425
-A
è l'app Django in cui celery.py
si trova.
Per sedano 3.0+:
$ celery purge
Per eliminare una coda specifica:
$ celery -Q queue_name purge
celery -A proj purge
.
Ad esempio, quando si utilizza worker con il parametro -Q per definire le code
celery worker -Q queue1,queue2,queue3
quindi celery purge
non funzionerà, perché non è possibile passargli i parametri della coda. Elimina solo la coda predefinita. La soluzione è avviare i tuoi lavoratori con --purge
parametri come questo:
celery worker -Q queue1,queue2,queue3 --purge
Ciò eseguirà comunque il lavoratore.
Un'altra opzione è quella di utilizzare il sottocomando amqp di sedano
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
In Sedano 3+:
CLI:
$ celery -A proj purge
programatically:
>>> from proj.celery import app
>>> app.control.purge()
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
Ho scoperto che celery purge
non funziona per la mia configurazione di sedano più complessa. Uso più code denominate per scopi diversi:
$ sudo rabbitmqctl list_queues -p celery name messages consumers
Listing queues ... # Output sorted, whitespaced for readability
celery 0 2
celery@web01.celery.pidbox 0 1
celery@web02.celery.pidbox 0 1
apns 0 1
apns@web01.celery.pidbox 0 1
analytics 1 1
analytics@web01.celery.pidbox 0 1
bcast.361093f1-de68-46c5-adff-d49ea8f164c0 0 1
bcast.a53632b0-c8b8-46d9-bd59-364afe9998c1 0 1
celeryev.c27b070d-b07e-4e37-9dca-dbb45d03fd54 0 1
celeryev.c66a9bed-84bd-40b0-8fe7-4e4d0c002866 0 1
celeryev.b490f71a-be1a-4cd8-ae17-06a713cc2a99 0 1
celeryev.9d023165-ab4a-42cb-86f8-90294b80bd1e 0 1
La prima colonna è il nome della coda, la seconda è il numero di messaggi in attesa nella coda e la terza è il numero di listener per quella coda. Le code sono:
L'attività di analisi è un'attività di forza bruta che ha funzionato alla grande su piccoli set di dati, ma che ora richiede più di 24 ore per l'elaborazione. Occasionalmente, qualcosa andrà storto e rimarrà bloccato in attesa sul database. Deve essere riscritto, ma fino ad allora, quando si blocca, uccido l'attività, svuoto la coda e riprovo. Rilevo "stuckness" osservando il conteggio dei messaggi per la coda di analisi, che dovrebbe essere 0 (analisi terminata) o 1 (in attesa che l'analisi di ieri sera finisca). 2 o versione successiva non funziona e ricevo un'email.
celery purge
offre la possibilità di cancellare attività da una delle code di trasmissione e non vedo un'opzione per scegliere una coda con nome diverso.
Ecco il mio processo:
$ sudo /etc/init.d/celeryd stop # Wait for analytics task to be last one, Ctrl-C
$ ps -ef | grep analytics # Get the PID of the worker, not the root PID reported by celery
$ sudo kill <PID>
$ sudo /etc/init.d/celeryd stop # Confim dead
$ python manage.py celery amqp queue.purge analytics
$ sudo rabbitmqctl list_queues -p celery name messages consumers # Confirm messages is 0
$ sudo /etc/init.d/celeryd start
celeryctl purge
non ha funzionato con le code con nome. python manage.py celery amqp queue.purge <queue_name>
fatto. Penso che il contesto sia utile per quelli con configurazioni complesse, quindi possono capire cosa devono fare se celeryctl purge
falliscono.
manage.py
nel mio Celery 3.1.17, il file è stato rimosso o appena sculacciato nuovo? Ho trovato quello che sembra l'interfaccia corrispondente ( queue.purge
) in */bin/amqp.py
, tuttavia. Ma dopo aver provato a correlare il contenuto del file con la documentazione, devo purtroppo ammettere che il sedano è tristemente privo di documenti e anche un lavoro molto contorto, almeno a giudicare dal suo codice sorgente.
manage.py
è lo script di gestione di Django ed manage.py celery
esegue il sedano dopo aver caricato la configurazione dalle impostazioni di Django. Non ho usato il sedano al di fuori di Django, ma il celery
comando incluso potrebbe essere quello che stai cercando: celery.readthedocs.org/en/latest/userguide/monitoring.html
In sedano 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
Elimina coda denominata:
celery -A proj amqp queue.purge <queue name>
Elimina coda configurata
celery -A proj purge
Ho eliminato i messaggi, ma ci sono ancora messaggi nella coda? Risposta: le attività vengono confermate (rimosse dalla coda) non appena vengono effettivamente eseguite. Dopo che il lavoratore ha ricevuto un'attività, ci vorrà del tempo prima che venga effettivamente eseguita, soprattutto se ci sono molte attività già in attesa di esecuzione. I messaggi non riconosciuti vengono trattenuti dal lavoratore fino a quando non chiude la connessione al broker (server AMQP). Quando tale connessione viene chiusa (ad es. Perché il lavoratore è stato interrotto), le attività verranno reinviate dal broker al lavoratore disponibile successivo (o allo stesso lavoratore quando è stato riavviato), in modo da eliminare correttamente la coda di attività in attesa deve interrompere tutti i lavoratori e quindi eliminare le attività utilizzando celery.control.purge ().
Quindi per eliminare l'intera coda i lavoratori devono essere fermati.
Se vuoi rimuovere tutte le attività in sospeso e anche quelle attive e riservate per interrompere completamente il sedano, questo è ciò che ha funzionato per me:
from proj.celery import app
from celery.task.control import inspect, revoke
# remove pending tasks
app.control.purge()
# remove active tasks
i = inspect()
jobs = i.active()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
# remove reserved tasks
jobs = i.reserved()
for hostname in jobs:
tasks = jobs[hostname]
for task in tasks:
revoke(task['id'], terminate=True)
1. Per eliminare correttamente la coda delle attività di attesa, è necessario arrestare tutti i lavoratori ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- ancora-messaggi-lasciato-in-coda ):
$ sudo rabbitmqctl stop
oppure (nel caso RabbitMQ / broker di messaggi sia gestito dal Supervisore):
$ sudo supervisorctl stop all
2. ... e quindi eliminare le attività da una coda specifica:
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. Avvia RabbitMQ:
$ sudo rabbitmqctl start
oppure (nel caso RabbitMQ sia gestito dal Supervisore):
$ sudo supervisorctl start all
celery 4+ comando di eliminazione del sedano per eliminare tutte le code delle attività configurate
celery -A *APPNAME* purge
a livello di codice:
from proj.celery import app
app.control.purge()
tutte le attività in sospeso verranno eliminate. Riferimento: sedano rapa
manage.py celery purge
(celeryctl
ora è deprecato e sparirà in 3.1).