अजवाइन / खरगोश के सभी लंबित कार्यों को हटाना


199

मैं task_idप्रत्येक कार्य के लिए जाने बिना सभी लंबित कार्यों को कैसे हटा सकता हूं ?

जवाबों:


296

से डॉक्स :

$ celery -A proj purge

या

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

(EDIT: वर्तमान पद्धति से अपडेट किया गया।)


56
या, Django से, अजवाइन 3.0+ के लिए: manage.py celery purge( celeryctlअब वंचित है और 3.1 में चला जाएगा)।
हेनरिक हेमबर्गर

3
मुझे यह जवाब मिला कि यह एक रेडिस बैकएंड के साथ कैसे करना है। सबसे अच्छी विधि मुझे मिली redis-cli KEYS "celery*" | xargs redis-cli DELजो मेरे लिए काम की थी । यह आपके द्वारा उपयोग किए जा रहे रेडिस बैकएंड पर संग्रहीत सभी कार्यों को मिटा देगा।
मेलिनसस

1
मैं अजवाइन 3.0 में यह कैसे कर सकता हूं?
लूइस्ट्म

2
मेरे लिए, यह बस celery purge(प्रासंगिक वर्चुअल एनवी के अंदर) था। Ooops - नीचे उसी के साथ एक उत्तर है ..... stackoverflow.com/a/20404976/1213425
Erve1879

Django के साथ संयोजन में Celery 4.0+ के लिए यह फिर से यह कमांड है, जहां तर्क -ADjango ऐप है जहां celery.pyस्थित है।
गीताकार

120

अजवाइन के लिए 3.0+:

$ celery purge

विशिष्ट कतार को शुद्ध करने के लिए:

$ celery -Q queue_name purge

9
यदि आपको कनेक्शन त्रुटियां मिलती हैं, तो सुनिश्चित करें कि आप ऐप निर्दिष्ट करते हैं, जैसे celery -A proj purge
कामिल सिंडी

25

अजवाइन के लिए 2.x और 3.x:

उदाहरण के लिए, क्यू को परिभाषित करने के लिए क्यू पैरामीटर के साथ कार्यकर्ता का उपयोग करना

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

हां, यह अजवाइन के पुराने (2.x और शायद 3.x) संस्करणों के लिए है। मैं जवाब को संपादित नहीं कर सकता
स्मिडो


9

मैंने पाया कि 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

पहला कॉलम कतार नाम है, दूसरा कतार में प्रतीक्षा कर रहे संदेशों की संख्या है, और तीसरा उस कतार के श्रोताओं की संख्या है। कतारें हैं:

  • अजवाइन - मानक, सुपाच्य अजवाइन कार्यों के लिए कतार
  • एपन - एप्पल पुश अधिसूचना सेवा कार्यों के लिए कतार, काफी बेरोजगारी के रूप में नहीं
  • एनालिटिक्स - लंबे समय तक चलने वाले एनालिटिक्स के लिए कतार
  • * .पिडबॉक्स - श्रमिक कमांड के लिए कतार, जैसे शटडाउन और रीसेट, प्रति कार्यकर्ता (2 सेलेरी कार्यकर्ता, एक एपन कार्यकर्ता, एक एनालिटिक्स कार्यकर्ता)
  • बोका। * - एक कतार में सुनने वाले सभी श्रमिकों को संदेश भेजने के लिए (केवल इसे हथियाने के लिए पहले की बजाय) संदेश प्रसारित करें।
  • celeryev। * - कार्य विश्लेषण की रिपोर्टिंग के लिए अजवाइन की घटना की कतारें

एनालिटिक्स टास्क एक क्रूर बल कार्य है, जो छोटे डेटा सेट पर बहुत अच्छा काम करता है, लेकिन अब इसे प्रोसेस करने में 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

हालांकि इसका जवाब नहीं है, क्या यह है? हालांकि बहुत जानकारीपूर्ण!
आमजन २

4
celeryctl purgeनामित कतारों के साथ काम नहीं किया। python manage.py celery amqp queue.purge <queue_name>किया। मुझे लगता है कि संदर्भ जटिल सेटअप वाले लोगों के लिए उपयोगी है, इसलिए वे यह पता लगा सकते हैं कि उनके celeryctl purgeलिए असफल होने पर उन्हें क्या करने की आवश्यकता है ।
jwhitlock

मैं manage.pyअपने सेलेरी 3.1.17 में नहीं मिल सकता , क्या फ़ाइल को हटा दिया गया है या सिर्फ नया स्पैंक कर रहा है? मैंने पाया कि क्या इसी इंटरफ़ेस ( queue.purge) में जैसा दिखता है */bin/amqp.py। लेकिन दस्तावेज़ीकरण के साथ फ़ाइल की सामग्री को सहसंबंधित करने की कोशिश करने के बाद, मुझे पछतावा करना चाहिए कि सेलेरी बहुत ही अनपढ़ है और काम का एक बहुत जटिल टुकड़ा है, कम से कम इसे अपने स्रोत कोड से देखते हुए।
आम

manage.pyDjango प्रबंधन स्क्रिप्ट है, और manage.py celeryDjango सेटिंग्स से कॉन्फ़िगरेशन लोड करने के बाद अजवाइन चलाता है। मैंने Django के बाहर अजवाइन का उपयोग नहीं किया है, लेकिन इसमें शामिल celeryआदेश हो सकता है कि आप क्या देख रहे हैं: celery.readthedocs.org/en/latest/userguide/monitoring.html
jwhitlock

5

अजवाइन में 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 () का उपयोग करके कार्यों को शुद्ध करना है।

ताकि पूरी कतार के कर्मचारियों को रोकना पड़े।


5

यदि आप सेलेरी को पूरी तरह से बंद करने के लिए सभी लंबित कार्यों और सक्रिय और आरक्षितों को हटाना चाहते हैं, तो यह मेरे लिए काम कर रहा है:

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)

2

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

2

अजवाइन 4+ अजवाइन पर्ज कमांड सभी कॉन्फ़िगर कार्य कतारों को शुद्ध करने के लिए

celery -A *APPNAME* purge

प्रोग्राम के रूप में:

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

सभी लंबित कार्य को शुद्ध किया जाएगा। संदर्भ: अजवाइन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.