উত্তর:
দস্তাবেজগুলি থেকে :
$ celery -A proj purge
অথবা
from proj.celery import app
app.control.purge()
(সম্পাদনা: বর্তমান পদ্ধতির সাথে আপডেট হয়েছে))
redis-cli KEYS "celery*" | xargs redis-cli DEL
আমার জন্য কাজ করে। এটি আপনার ব্যবহার করা রেডিস ব্যাকএন্ডে সঞ্চিত সমস্ত কাজ মুছে ফেলবে।
celery purge
(প্রাসঙ্গিক ভার্চুয়াল এনভির ভিতরে) ছিল। ওহো - সেখানে নিচের একই ..... সাথে একটা উত্তর stackoverflow.com/a/20404976/1213425
-A
জ্যাঙ্গো অ্যাপ্লিকেশনটি যেখানে celery.py
অবস্থিত।
সেলারি 3.0+ এর জন্য:
$ celery purge
একটি নির্দিষ্ট সারি শুদ্ধ করতে:
$ celery -Q queue_name purge
celery -A proj purge
।
উদাহরণস্বরূপ, কিউ নির্ধারণ করতে -Q প্যারামিটার সহ কর্মী ব্যবহার করার সময়
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
Programatically:
>>> 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
। তবে ডকুমেন্টেশনের সাথে ফাইলের বিষয়বস্তুগুলির সাথে সম্পর্ক স্থাপন করার চেষ্টা করার পরে, আমি আফসোস করে স্বীকার করতে হবে যে সেলারিটি হ'ল হতাশাজনকভাবে অননুমোদিত এবং এটির একটি খুব সংশ্লেষিত টুকরো টুকরোও অন্তত এর উত্স কোড অনুসারে বিচার করে jud
manage.py
এটি জ্যাঙ্গো পরিচালনা স্ক্রিপ্ট, এবং manage.py celery
জ্যাঙ্গো সেটিংস থেকে কনফিগারেশন লোড করার পরে সেলারি চালায়। আমি জ্যাঙ্গোর বাইরে সেলারি ব্যবহার করি নি, তবে অন্তর্ভুক্ত celery
কমান্ডটি আপনি যা খুঁজছেন তা হতে পারে: সেলারি.ড্রেটহেডসস.আর.ইন
সেলারি 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
আমি বার্তাগুলি শুদ্ধ করেছি, তবে কি সারিতে এখনও বার্তা রয়েছে? উত্তর: কার্য সম্পাদন করার সাথে সাথে কার্যগুলি স্বীকার করা হয় (সারি থেকে সরিয়ে দেওয়া)। শ্রমিকের কোনও কাজ পাওয়ার পরে, এটি বাস্তবায়িত হওয়ার আগ পর্যন্ত কিছুটা সময় লাগবে, বিশেষত যদি ইতিমধ্যে কার্যকর করার জন্য অনেকগুলি কাজ ইতিমধ্যে অপেক্ষা করে থাকে। ব্রোকারের (এএমকিউপি সার্ভার) সংযোগ বন্ধ না করা পর্যন্ত যে বার্তাগুলি স্বীকৃত নয় সেগুলি কর্মী দ্বারা ধরে রাখা হয়। যখন সেই সংযোগটি বন্ধ হয়ে যায় (উদাহরণস্বরূপ শ্রমিকটি থামানো হয়েছিল) কাজগুলি ব্রোকারের দ্বারা পরবর্তী উপলব্ধ কর্মীর কাছে পুনরায় পাঠানো হবে (বা একই কর্মী পুনরায় চালু করার পরে), সুতরাং অপেক্ষার কাজগুলির সারিটি সঠিকভাবে পরিস্কার করার জন্য সমস্ত কর্মীদের থামাতে হবে, এবং তারপরে সেলারি.কন্ট্রোল.পুরজ () ব্যবহার করে কার্যগুলি মুছে ফেলতে হবে।
সুতরাং পুরো কাতারে শোধ করার জন্য শ্রমিকদের থামাতে হবে।
আপনি যদি সেলেরি সম্পূর্ণরূপে বন্ধ করার জন্য সমস্ত মুলতুবি কাজগুলি এবং সক্রিয় এবং সংরক্ষিতগুলিও সরাতে চান, এটি আমার পক্ষে কাজ করেছে:
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
২ ... এবং তারপরে একটি নির্দিষ্ট সারি থেকে কার্যগুলি মুছে ফেলুন:
$ cd <source_dir>
$ celery amqp queue.purge <queue name>
3. র্যাবিট এমকিউ শুরু করুন:
$ 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-এ চলে যাবে)।