Eliminazione di tutte le attività in sospeso in sedano / coniglio


Risposte:


296

Dai documenti :

$ celery -A proj purge

o

from proj.celery import app
app.control.purge()

(EDIT: aggiornato con il metodo corrente.)


56
Oppure, da Django, per sedano 3.0+: manage.py celery purge( celeryctlora è deprecato e sparirà in 3.1).
Henrik Heimbuerger,

3
Ho trovato questa risposta cercando come farlo con un backend redis. Il metodo migliore che ho trovato è quello redis-cli KEYS "celery*" | xargs redis-cli DELche ha funzionato per me. Questo cancellerà tutte le attività memorizzate sul back-end redis in uso.
Melignus,

1
Come posso fare questo in sedano 3.0?
luistm,

2
Per me era semplicemente celery purge(all'interno del relativo ambiente virtuale). Ooops - c'è una risposta con la stessa di seguito ..... stackoverflow.com/a/20404976/1213425
Erve1879

Per Celery 4.0+ in combinazione con Django è di nuovo questo comando, dove l'argomento -Aè l'app Django in cui celery.pysi trova.
Gitaarik,

120

Per sedano 3.0+:

$ celery purge

Per eliminare una coda specifica:

$ celery -Q queue_name purge

9
Se ricevi errori di connessione, assicurati di specificare l'app, ad es celery -A proj purge.
Kamil Sindi,

25

Per sedano 2.xe 3.x:

Ad esempio, quando si utilizza worker con il parametro -Q per definire le code

celery worker -Q queue1,queue2,queue3

quindi celery purgenon funzionerà, perché non è possibile passargli i parametri della coda. Elimina solo la coda predefinita. La soluzione è avviare i tuoi lavoratori con --purgeparametri 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

Sì, questo è per le versioni precedenti (2.xe forse 3.x) di sedano. Non riesco a modificare la risposta
smido,


9

Ho scoperto che celery purgenon 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:

  • sedano - Coda per compiti di sedano standard e idempotenti
  • apns - Coda per le attività del servizio di notifica push di Apple, non altrettanto idempotente
  • analytics - Coda per analisi notturne di lunga durata
  • * .pidbox - Coda per i comandi di lavoro, come arresto e ripristino, uno per lavoratore (2 sedani, un lavoratore apns, un lavoratore di analisi)
  • bcast. * - Code di trasmissione, per l'invio di messaggi a tutti i lavoratori che ascoltano una coda (anziché solo il primo a catturarla)
  • celeryev. * - Code di eventi sedano, per la reportistica di analisi delle attività

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

Non è una risposta, vero? Molto istruttivo comunque!
AMN

4
celeryctl purgenon 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 purgefalliscono.
jwhitlock,

Non riesco a trovare manage.pynel 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.
AMN

manage.pyè lo script di gestione di Django ed manage.py celeryesegue il sedano dopo aver caricato la configurazione dalle impostazioni di Django. Non ho usato il sedano al di fuori di Django, ma il celerycomando incluso potrebbe essere quello che stai cercando: celery.readthedocs.org/en/latest/userguide/monitoring.html
jwhitlock

5

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.


5

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)

2

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

2

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.