Jak mogę usunąć wszystkie oczekujące zadania, nie znając ich task_id
dla każdego zadania?
task
rabbitmq
celery
celery-task
nabizan
źródło
źródło
manage.py celery purge
(celeryctl
jest już nieaktualny i zniknie w wersji 3.1).redis-cli KEYS "celery*" | xargs redis-cli DEL
która działała dla mnie. Spowoduje to wymazanie wszystkich zadań przechowywanych w backendzie redis, którego używasz.celery purge
(wewnątrz odpowiedniej wirtualnej env).-A
jest aplikacja Django, w której sięcelery.py
znajduje.Dla selera 3.0+:
Aby wyczyścić określoną kolejkę:
źródło
celery -A proj purge
.W przypadku selera 2.xi 3.x:
Na przykład przy użyciu pracownika z parametrem -Q do definiowania kolejek
wtedy
celery purge
nie będzie działać, ponieważ nie można przekazać do niego parametrów kolejki. Usunie tylko domyślną kolejkę. Rozwiązaniem jest uruchomienie pracowników z--purge
parametrem takim jak ten:Spowoduje to jednak uruchomienie pracownika.
Inną opcją jest użycie komendy amqp selera
źródło
W Selerze 3+:
CLI:
Programowo:
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
źródło
Odkryłem, że
celery purge
to nie działa w mojej bardziej złożonej konfiguracji selera. Korzystam z wielu nazwanych kolejek do różnych celów:Pierwsza kolumna to nazwa kolejki, druga to liczba wiadomości oczekujących w kolejce, a trzecia to liczba detektorów dla tej kolejki. Kolejki to:
Zadanie analityczne to zadania typu brute force, które świetnie sprawdzały się w przypadku małych zestawów danych, ale ich przetwarzanie zajmuje teraz ponad 24 godziny. Czasami coś pójdzie nie tak i utknie w oczekiwaniu na bazę danych. Musi zostać przepisany, ale do tego czasu, kiedy się zacina, zabijam zadanie, opróżniam kolejkę i próbuję ponownie. „Zakleszczenie” wykrywam, sprawdzając liczbę komunikatów w kolejce analitycznej, która powinna wynosić 0 (gotowe analizy) lub 1 (oczekiwanie na zakończenie ostatniej nocy analizy). 2 lub wyższy jest zły i dostaję e-mail.
celery purge
oferuje usunięcie zadań z jednej z kolejek rozgłoszeniowych i nie widzę opcji wyboru innej nazwanej kolejki.Oto mój proces:
źródło
celeryctl purge
nie działał z nazwanymi kolejkami.python manage.py celery amqp queue.purge <queue_name>
zrobił. Myślę, że kontekst jest przydatny dla osób ze złożonymi ustawieniami, aby mogli dowiedzieć się, co powinni zrobić, jeśli sięceleryctl purge
nie powiedzie.manage.py
w moim Selerze 3.1.17, czy plik został usunięty, czy po prostu dawał klapsy nowy? Znalazłem jednak coś, co wygląda jak odpowiedni interfejs (queue.purge
)*/bin/amqp.py
. Ale po próbie skorelowania zawartości pliku z dokumentacją muszę niestety przyznać, że Celery jest żałośnie nieudokumentowana, a także bardzo skomplikowana, przynajmniej oceniając kod źródłowy.manage.py
jest skryptem zarządzania Django imanage.py celery
uruchamia seler po załadowaniu konfiguracji z ustawień Django. Nie używałem selera poza Django, ale dołączonecelery
polecenie może być tym, czego szukasz: celery.readthedocs.org/en/latest/userguide/monitoring.htmlW Selerze 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
Wyczyść nazwaną kolejkę:
Wyczyść skonfigurowaną kolejkę
Aby oczyścić całą kolejkę, należy zatrzymać pracowników.
źródło
Jeśli chcesz usunąć wszystkie oczekujące zadania, a także aktywne i zastrzeżone, aby całkowicie zatrzymać Selera, to działało dla mnie:
źródło
1. Aby poprawnie wyczyścić kolejkę zadań oczekujących, musisz zatrzymać wszystkich pracowników ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- nadal-wiadomości-pozostawione w kolejce ):
lub (w przypadku gdy RabbitMQ / broker wiadomości jest zarządzany przez Inspektora):
2. ... a następnie usuń zadania z określonej kolejki:
3. Uruchom RabbitMQ:
lub (w przypadku gdy RabbitMQ jest zarządzany przez Inspektora):
źródło
komenda celery 4+ seler purge, aby wyczyścić wszystkie skonfigurowane kolejki zadań
programowo:
wszystkie oczekujące zadania zostaną usunięte. Referencja: seler naciowy
źródło