2011-10-27 15 views
15

Belirli bir que'nin programlanmış ve çalışan tüm görevleri kereviz ile python'da nasıl temizlenir? sorular oldukça straigtforward görünüyor ama komut satırı kodu aramıyorum eklemek içinPiton ile belirli bir sıradaki tüm görevleri python'da nasıl temizlerim?

Ben que tanımlar ve görevleri yönetmek için bu que tasfiye etmek istiyorum aşağıdaki satırı vardır:

CELERY_ROUTES = {"socialreport.tasks.twitter_save": {"queue": "twitter_save"}} 

Zamanında 1 noktasında, twitter_save içindeki tüm görevleri python koduyla, belki de yayın işleviyle temizlemek istiyorum. Bununla ilgili belgeleri bulamadım. Mümkün mü?

cevap

33

sadece kereviz 3.1 @Sam Stoelinga cevap güncellemek için, şimdi bir terminalde böyle yapılabilir:

./manage.py celery amqp queue.purge <QUEUE_NAME> 

değilse, emin kereviz --broker= bayrağı ayarlayarak komisyoncu doğru işaret etmek mümkün olduğunu olun.

+0

Bu çalışma, Celery 3.1 – Gourneau

+0

için teşekkürler. Django settings.py dosyasındaki yapılandırılmış değerin bir nedeninden dolayı, geçerli bir AMQP URL'sine işaret etmek için '--broker = ... argümanı kullanmam gerekiyordu. . Belki benim kurulumumun bir özelliği. – RichVel

+0

@RichVel, onu./Manage.py''den çalıştırıyor musunuz? Broker url argümanı 'settings.py' dosyasından alınmalıdır. – Hassek

6

Lol oldukça kolaydır, umarım birisi yine de bana yardımcı olabilir.

from celery.bin.camqadm import camqadm 
camqadm('queue.purge', queue_name_as_string) 

Hala kuyrukta görevlerini işlemek için tekrar celeryd çalıştırmak için gereken temizledikten sonra, que tasfiye önce celeryd durdurmak için gereken bu tek sorun. Başarılı olursam bu soruyu günceller.

başardım ama bu celeryd, tasfiye que durdurmak ve yeniden başlatmak için iyi bir yöntem değildir varsa düzeltin lütfen. Terim kullanıyorum, çünkü aslında görev sonlandırılmasını istiyorum.

celery amqp queue.purge <QUEUE_NAME> 

Django için manage.py dosyadan başlatmak için emin olun:

kill_command = "ps auxww | grep 'celeryd -n twitter_save' | awk '{print $2}' | xargs kill -9" 
subprocess.call(kill_command, shell=True) 

camqadm('queue.purge', 'twitter_save') 
rerun_command = "/home/samos/Software/virt_env/twittersyncv1/bin/python %s/manage.py celeryd -n twitter_save -l info -Q twitter_save" % settings.PROJECT_ROOT 

os.popen(rerun_command+' &') 
send_task("socialreport.tasks.twitter_save") 
6

Orijinal yanıt, Kereviz 3.1 için çalışmaz. Komut satırından yapmak istiyorsanız, Hassek'in güncellemesi doğru komuttur. Eğer programlı Bunu yapmak yapmak istiyorsanız:

celery_app = Celery(...) 

Sonra toplam: sizi varsayarsak

sizin Kereviz app koştu

import celery.bin.amqp 
amqp = celery.bin.amqp.amqp(app = celery_app) 
amqp.run('queue.purge', 'name_of_your_queue') 

Bu durumlar için kullanışlı nerede' ve görevlerin bir kısmını sıraya koydu ve bir görev, görevlerin geri kalanının yürütülmesini engelleyeceğini bildiğiniz ölümcül bir durumla karşılaştı.

E.g. Bir sürü web tarayıcısı görevini siz belirlediniz ve görevlerinizin ortasında sunucunuzun IP adresi engellenir. Görevlerin geri kalanını yürütmenin bir anlamı yok. Yani bu durumda, göreviniz kendi kuyruğunu temizleyebilir.

İlgili konular