जवाबों:
से डॉक्स :
$ celery -A proj purge
या
from proj.celery import app
app.control.purge()
(EDIT: वर्तमान पद्धति से अपडेट किया गया।)
redis-cli KEYS "celery*" | xargs redis-cli DEL
जो मेरे लिए काम की थी । यह आपके द्वारा उपयोग किए जा रहे रेडिस बैकएंड पर संग्रहीत सभी कार्यों को मिटा देगा।
celery purge
(प्रासंगिक वर्चुअल एनवी के अंदर) था। Ooops - नीचे उसी के साथ एक उत्तर है ..... stackoverflow.com/a/20404976/1213425
-A
Django ऐप है जहां celery.py
स्थित है।
अजवाइन के लिए 3.0+:
$ celery purge
विशिष्ट कतार को शुद्ध करने के लिए:
$ celery -Q queue_name purge
celery -A proj purge
।
उदाहरण के लिए, क्यू को परिभाषित करने के लिए क्यू पैरामीटर के साथ कार्यकर्ता का उपयोग करना
celery worker -Q queue1,queue2,queue3
तब celery purge
काम नहीं करेगा, क्योंकि आप कतार पारम को पास नहीं कर सकते। यह केवल डिफ़ॉल्ट कतार को हटा देगा। समाधान --purge
इस तरह से पैरामीटर के साथ अपने श्रमिकों को शुरू करना है :
celery worker -Q queue1,queue2,queue3 --purge
हालांकि यह कार्यकर्ता चलाएगा।
अन्य विकल्प अजवाइन के एमक्यूपी उपकमांड का उपयोग करना है
celery amqp queue.delete queue1
celery amqp queue.delete queue2
celery amqp queue.delete queue3
अजवाइन में 3+:
CLI:
$ celery -A proj purge
प्रोग्राम के:
>>> from proj.celery import app
>>> app.control.purge()
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
मैंने पाया कि celery purge
मेरे अधिक जटिल अजवाइन विन्यास के लिए काम नहीं करता है। मैं विभिन्न प्रयोजनों के लिए कई नामित कतारों का उपयोग करता हूं:
$ 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
पहला कॉलम कतार नाम है, दूसरा कतार में प्रतीक्षा कर रहे संदेशों की संख्या है, और तीसरा उस कतार के श्रोताओं की संख्या है। कतारें हैं:
एनालिटिक्स टास्क एक क्रूर बल कार्य है, जो छोटे डेटा सेट पर बहुत अच्छा काम करता है, लेकिन अब इसे प्रोसेस करने में 24 घंटे से अधिक समय लगता है। कभी-कभी, कुछ गलत हो जाएगा और यह डेटाबेस पर इंतजार कर अटक जाएगा। इसे फिर से लिखने की आवश्यकता है, लेकिन तब तक, जब यह फंस जाता है मैं कार्य को मारता हूं, कतार को खाली करता हूं, और फिर से प्रयास करता हूं। मैं एनालिटिक्स कतार के लिए मैसेज काउंट को देखकर "स्टैनेस" का पता लगाता हूं, जो 0 (समाप्त एनालिटिक्स) या 1 होना चाहिए (अंतिम रात के एनालिटिक्स के खत्म होने का इंतजार)। 2 या उच्चतर खराब है, और मुझे एक ईमेल मिलता है।
celery purge
प्रसारण कतारों में से एक से कार्यों को मिटाने की पेशकश करता है, और मुझे एक अलग नामित कतार चुनने का विकल्प नहीं दिखता है।
यहाँ मेरी प्रक्रिया है:
$ 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
नामित कतारों के साथ काम नहीं किया। python manage.py celery amqp queue.purge <queue_name>
किया। मुझे लगता है कि संदर्भ जटिल सेटअप वाले लोगों के लिए उपयोगी है, इसलिए वे यह पता लगा सकते हैं कि उनके celeryctl purge
लिए असफल होने पर उन्हें क्या करने की आवश्यकता है ।
manage.py
अपने सेलेरी 3.1.17 में नहीं मिल सकता , क्या फ़ाइल को हटा दिया गया है या सिर्फ नया स्पैंक कर रहा है? मैंने पाया कि क्या इसी इंटरफ़ेस ( queue.purge
) में जैसा दिखता है */bin/amqp.py
। लेकिन दस्तावेज़ीकरण के साथ फ़ाइल की सामग्री को सहसंबंधित करने की कोशिश करने के बाद, मुझे पछतावा करना चाहिए कि सेलेरी बहुत ही अनपढ़ है और काम का एक बहुत जटिल टुकड़ा है, कम से कम इसे अपने स्रोत कोड से देखते हुए।
manage.py
Django प्रबंधन स्क्रिप्ट है, और manage.py celery
Django सेटिंग्स से कॉन्फ़िगरेशन लोड करने के बाद अजवाइन चलाता है। मैंने Django के बाहर अजवाइन का उपयोग नहीं किया है, लेकिन इसमें शामिल celery
आदेश हो सकता है कि आप क्या देख रहे हैं: celery.readthedocs.org/en/latest/userguide/monitoring.html
अजवाइन में 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
कतार का नाम:
celery -A proj amqp queue.purge <queue name>
पर्ज कॉन्फ़िगर किया गया कतार
celery -A proj purge
मैंने संदेश शुद्ध कर दिए हैं, लेकिन कतार में अभी भी संदेश बाकी हैं? उत्तर: वास्तव में निष्पादित होते ही कार्य स्वीकार किए जाते हैं (कतार से हटा दिए जाते हैं)। कार्यकर्ता को एक कार्य प्राप्त होने के बाद, वास्तव में निष्पादित होने तक कुछ समय लगेगा, खासकर यदि निष्पादन के लिए पहले से ही बहुत सारे कार्य हैं। संदेशों को स्वीकार नहीं किया जाता है जब तक कि यह ब्रोकर (एएमक्यूपी सर्वर) से कनेक्शन बंद नहीं कर देता है। जब वह कनेक्शन बंद हो जाता है (जैसे कि कर्मी को रोक दिया गया था) तो कार्यों को ब्रोकर द्वारा अगले उपलब्ध कर्मी को भेज दिया जाएगा (या उसी कर्मी को जब इसे फिर से शुरू किया गया है), ताकि आपके द्वारा प्रतीक्षा किए जाने वाले कार्यों की कतार को ठीक से शुद्ध किया जा सके। सभी श्रमिकों को रोकना है, और फिर celery.control.purge () का उपयोग करके कार्यों को शुद्ध करना है।
ताकि पूरी कतार के कर्मचारियों को रोकना पड़े।
यदि आप सेलेरी को पूरी तरह से बंद करने के लिए सभी लंबित कार्यों और सक्रिय और आरक्षितों को हटाना चाहते हैं, तो यह मेरे लिए काम कर रहा है:
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. सभी कर्मचारियों को रोकने के लिए आपके द्वारा किए जाने वाले प्रतीक्षा कार्यों की कतार को ठीक से शुद्ध करने के लिए ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- अभी भी संदेश-बाएँ-में-कतार ):
$ sudo rabbitmqctl stop
या (अगर खरगोश / संदेश दलाल पर्यवेक्षक द्वारा प्रबंधित किया जाता है):
$ sudo supervisorctl stop all
2. ... और फिर एक विशिष्ट कतार से कार्यों को शुद्ध करें:
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. शुरू करें RabbitMQ:
$ sudo rabbitmqctl start
या (यदि खरगोश पर्यवेक्षक द्वारा प्रबंधित किया जाता है):
$ sudo supervisorctl start all
अजवाइन 4+ अजवाइन पर्ज कमांड सभी कॉन्फ़िगर कार्य कतारों को शुद्ध करने के लिए
celery -A *APPNAME* purge
प्रोग्राम के रूप में:
from proj.celery import app
app.control.purge()
सभी लंबित कार्य को शुद्ध किया जाएगा। संदर्भ: अजवाइन
manage.py celery purge
(celeryctl
अब वंचित है और 3.1 में चला जाएगा)।