Yanıtlar:
Gönderen docs :
$ celery -A proj purge
veya
from proj.celery import app
app.control.purge()
(EDIT: Mevcut yöntemle güncellendi.)
redis-cli KEYS "celery*" | xargs redis-cli DEL
için işe yaradı. Bu, kullandığınız yeniden arka uçta depolanan tüm görevleri silecektir.
celery purge
(ilgili sanal çevrenin içinde). Ooops - aşağıdaki ile bir cevap var ..... stackoverflow.com/a/20404976/1213425
-A
bulunduğu Django uygulamasıdır celery.py
.
Kereviz 3.0+ için:
$ celery purge
Belirli bir kuyruğu temizlemek için:
$ celery -Q queue_name purge
celery -A proj purge
.
Örneğin kuyrukları tanımlamak için -Q parametresine sahip çalışan kullanırken
celery worker -Q queue1,queue2,queue3
o celery purge
zaman işe yaramaz, çünkü kuyruk parametrelerini ona iletemezsiniz. Yalnızca varsayılan kuyruğu silecektir. Çözüm, işçilerinize --purge
böyle bir parametre ile başlamaktır :
celery worker -Q queue1,queue2,queue3 --purge
Ancak bu işçi çalıştıracaktır.
Diğer seçenek kereviz amqp alt komutunu kullanmaktır
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
Kereviz 3+:
CLI:
$ celery -A proj purge
programlama yoluyla:
>>> from proj.celery import app
>>> app.control.purge()
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
Bunun celery purge
daha karmaşık kereviz yapılandırmam için işe yaramadığını gördüm. Farklı amaçlar için birden fazla adlandırılmış kuyruk kullanıyorum:
$ 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
İlk sütun kuyruk adı, ikincisi kuyrukta bekleyen mesaj sayısı, üçüncüsü de bu kuyruk için dinleyici sayısıdır. Sıralar:
Analitik görevi, küçük veri kümelerinde harika çalışan kaba kuvvet görevleridir, ancak şimdi işlenmesi 24 saatten fazla sürmektedir. Bazen, bir şeyler ters gidecek ve veritabanında beklemeye takılıp kalacaktır. Yeniden yazılması gerekiyor, ancak o zamana kadar, sıkışınca görevi öldürürüm, kuyruğu boşaltır ve tekrar denerim. 0 (bitmiş analitik) veya 1 (geçen gece analitiklerin bitmesini bekleyerek) olması gereken analitik kuyruğunun mesaj sayısına bakarak "sıkışmışlık" tespit ediyorum. 2 veya üstü kötü ve bir e-posta alıyorum.
celery purge
yayın kuyruklarından birinden görevleri silmeyi teklif ediyor ve farklı bir adlandırılmış kuyruk seçme seçeneği görmüyorum.
İşte benim sürecim:
$ 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
adlandırılmış kuyruklarla çalışmadı. python manage.py celery amqp queue.purge <queue_name>
yaptı. Bağlamın karmaşık kurulumları olanlar için yararlı olduğunu düşünüyorum, böylece celeryctl purge
başarısız olursa ne yapmaları gerektiğini anlayabilirler .
manage.py
Kereviz 3.1.17'de bulamıyorum , dosya kaldırıldı mı veya sadece yeni şaplak mı? Ancak , karşılık gelen arabirim ( queue.purge
) neye benzediğini buldum */bin/amqp.py
. Ancak dosyanın içeriğini belgelerle ilişkilendirmeye çalıştıktan sonra, Kereviz'in çaresizce belgelenmediğini ve aynı zamanda en azından kaynak koduyla değerlendirerek çok kıvrımlı bir çalışma olduğunu itiraf etmeliyim .
manage.py
, Django yönetim betiğidir ve manage.py celery
yapılandırmayı Django ayarlarından yükledikten sonra kerevizi çalıştırır. Django dışında kereviz kullanmadım, ancak dahil edilen celery
komut aradığınız şey olabilir: celery.readthedocs.org/en/latest/userguide/monitoring.html
Kereviz 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
Adlandırılmış kuyruğu temizle:
celery -A proj amqp queue.purge <queue name>
Yapılandırılmış kuyruğu temizle
celery -A proj purge
İletileri temizledim, ancak sırada hâlâ iletiler kaldı mı? Yanıt: Gerçekte yürütülür yürütülmez görevler onaylanır (kuyruktan kaldırılır). İşçinin bir görev aldıktan sonra, özellikle yürütülmesini bekleyen birçok görev varsa, gerçekten yürütülene kadar biraz zaman alacaktır. Onaylanmayan iletiler, aracıya (AMQP sunucusu) bağlantıyı kapatana kadar çalışan tarafından tutulur. Bu bağlantı kapatıldığında (örneğin, çalışan durdurulduğu için) görevler, aracı tarafından bir sonraki kullanılabilir çalışana (veya yeniden başlatıldığında aynı çalışana) yeniden gönderilir, böylece bekleme görevlerinin sırasını düzgün bir şekilde temizlemek için tüm işçileri durdurmalı ve sonra celery.control.purge () kullanarak görevleri temizlemelisiniz.
Bu yüzden tüm kuyruğu temizlemek için çalışanlar durdurulmalıdır.
Bekleyen tüm görevleri ve ayrıca Kereviz'i tamamen durdurmak için aktif ve ayrılmış olanları kaldırmak istiyorsanız, bu benim için işe yaradı:
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. Bekleme görevleri sırasını düzgün bir şekilde temizlemek için tüm çalışanları durdurmanız gerekir ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- hala iletiler-kuyrukta kalmış ):
$ sudo rabbitmqctl stop
veya (RabbitMQ / Message Broker'ın Süpervizör tarafından yönetilmesi durumunda):
$ sudo supervisorctl stop all
2. ... ve sonra görevleri belirli bir kuyruktan temizleyin:
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. RabbitMQ'yu başlatın:
$ sudo rabbitmqctl start
veya (RabbitMQ'nun Yönetici tarafından yönetilmesi durumunda):
$ sudo supervisorctl start all
kereviz 4+ kereviz temizleme komutu yapılandırılmış tüm görev kuyruklarını temizlemek için
celery -A *APPNAME* purge
programlı:
from proj.celery import app
app.control.purge()
beklemedeki tüm görevler temizlenir. Referans: celerydoc
manage.py celery purge
(celeryctl
şimdi kullanımdan kaldırıldı ve 3.1'de gidecek).