Usuwanie wszystkich oczekujących zadań w selery / rabbitmq

Jak mogę usunąć wszystkie oczekujące zadania bez znajomości task_id dla każdego zadania?

Author: nabizan, 2011-08-22

7 answers

Z docs :

$ celery -A proj purge

Lub

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

(EDIT: Updated with current method.)

 208
Author: Philip Southam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 15:20:36

Dla selera 3.0+:

$ celery purge

Aby wyczyścić określoną kolejkę:

$ celery -Q queue_name purge
 107
Author: ToonAlfrink,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 15:52:49

Dla Selera 2.x i 3.x:

Podczas używania workera z parametrem-Q do definiowania kolejek, na przykład

celery worker -Q queue1,queue2,queue3

Wtedy celery purge nie zadziała, ponieważ nie można przekazać do niej param kolejki. Usunie tylko domyślną kolejkę. Rozwiązaniem jest uruchomienie pracowników z --purge parametrem takim jak:

celery worker -Q queue1,queue2,queue3 --purge

To jednak uruchomi pracownika.

Inną opcją jest użycie subkomandu amqp selera

celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
 20
Author: smido,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 17:47:06

W Selerze 3+:

CLI:

$ celery -A proj purge

Programowo:

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

Http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks

 9
Author: ksindi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-03 17:28:35

Odkryłem, że celery purge nie działa dla mojej bardziej złożonej konfiguracji selera. Używam wielu nazwanych kolejek do różnych celów:

$ sudo rabbitmqctl list_queues -p celery name messages consumers
Listing queues ...  # Output sorted, whitespaced for readability
celery                                          0   2
[email protected]                      0   1
[email protected]                      0   1
apns                                            0   1
[email protected]                        0   1
analytics                                       1   1
[email protected]                   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

Pierwsza kolumna to nazwa kolejki, druga to liczba wiadomości oczekujących w kolejce, a trzecia to liczba słuchaczy dla tej kolejki. Kolejki:

  • seler-Kolejka standardowych, idempotentnych zadań selera
  • [[9]}apns-Kolejka Zadań usługi Apple Push Notification Service, nie do końca jako idempotent
  • analityka - Kolejka do długich analiz nocnych
  • *.pidbox-kolejkowanie poleceń workera, takich jak shutdown i reset, po jednym na pracownika (2 pracowników selerowych, jeden pracownik apns, jeden pracownik analityczny)
  • bcast.* - Broadcast queues, do wysyłania wiadomości do wszystkich pracowników słuchających kolejki (a nie tylko pierwszych, którzy ją przechwycili)
  • seler.* - Seler event queues, for reporting task analytics

Zadanie analytics to zadanie brute force, które działało świetnie na małych zestawach danych, ale teraz trwa więcej niż 24 godziny, aby przetworzyć. Czasami coś pójdzie nie tak i utknie w bazie danych. Musi być napisane od nowa, ale do tego czasu, kiedy się zacina, zabijam zadanie, opróżniam kolejkę i próbuję ponownie. Wykrywam "stuckness"patrząc na liczbę wiadomości dla kolejki analytics, która powinna wynosić 0 (zakończona analityka) lub 1 (oczekiwanie na wczorajszą analizę, aby zakończyć). 2 lub wyżej jest źle, i dostaję e-mail.

celery purge oferty kasowania zadań z jedna z kolejek transmisji i nie widzę opcji wyboru innej kolejki nazwanej.

Oto mój proces:

$ 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
 8
Author: jwhitlock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 20:00:19

W Selerze 3+

Http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks

CLI

Nazwa kolejki:

 celery -A proj amqp queue.purge <queue name>

Wyczyść skonfigurowaną kolejkę

celery -A proj purge

Wyczyściłem wiadomości, ale nadal są wiadomości w kolejce? Odpowiedź: zadania są potwierdzane (usuwane z kolejki) zaraz po ich wykonaniu. Po tym, jak pracownik otrzyma zadanie, zajmie trochę czasu, zanim zostanie faktycznie wykonywane, zwłaszcza jeśli Na wykonanie czeka już wiele zadań. Komunikaty, które nie są potwierdzone, są przechowywane przez worker, dopóki nie zamknie połączenia z brokerem (serwerem AMQP). Gdy to połączenie zostanie zamknięte (np. ponieważ worker został zatrzymany), zadania zostaną ponownie wysłane przez brokera do następnego dostępnego workera (lub tego samego workera, gdy został ponownie uruchomiony), więc aby poprawnie wyczyścić kolejkę oczekujących zadań, musisz zatrzymać wszystkich workerów, a następnie wyczyścić zadania przy użyciu selera.Kontrola.purge ().

Aby wyczyścić całą kolejkę należy zatrzymać pracowników.

 5
Author: oneklc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-20 00:12:30

1. Aby prawidłowo wyczyścić kolejkę oczekujących zadań, musisz zatrzymać wszystkich pracowników (http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are-still-messages-left-in-the-queue):

$ sudo rabbitmqctl stop

Lub (w przypadku gdy RabbitMQ / message broker jest zarządzany przez Supervisora):

$ sudo supervisorctl stop all

2. ...a następnie wyczyść zadania z określonej kolejki:

$ cd <source_dir>
$ celery amqp queue.purge <queue name>

3. Start RabbitMQ:

$ sudo rabbitmqctl start

Lub (w przypadku, gdy RabbitMQ jest zarządzany przez przełożonego):

$ sudo supervisorctl start all
 1
Author: Ukr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 15:48:07