एक कार्य एक संदेश है, और एक "आवधिक कार्य" आवधिक अंतराल पर कार्य संदेश भेजता है। भेजे गए प्रत्येक कार्य में एक अनन्य आईडी होगी जो इसे सौंपी जाएगी।
revoke
केवल एक ही कार्य संदेश रद्द कर देगा। किसी कार्य के लिए आईडी प्राप्त करने के लिए आपको आईडी भेजने का ट्रैक रखना होगा, लेकिन जब आप कोई कार्य भेजते हैं तो आप एक कस्टम आईडी भी निर्दिष्ट कर सकते हैं।
मुझे यकीन नहीं है कि क्या आप एक एकल कार्य संदेश रद्द करना चाहते हैं, या यदि आप आवधिक कार्य को और संदेश भेजने से रोकना चाहते हैं, तो मैं दोनों के लिए उत्तर सूचीबद्ध करूंगा।
आवधिक कार्य, लेकिन आप समय-समय पर कार्य के नाम के प्रत्येक कार्य के लिए आईडी सेट कर सकते हैं के साथ भेजा किसी कार्य के आईडी रखने के लिए कोई अंतर्निहित तरह से, कि जिस तरह से आईडी किसी भी उल्लेख करेंगे नहीं है आवधिक कार्य (आमतौर पर अंतिम एक) के साथ भेजा गया कार्य। आप एक कस्टम आईडी, इस तरह से निर्दिष्ट कर सकते हैं
या तो @periodic_task
डेकोरेटर के साथ:
@periodic_task(options={"task_id": "my_periodic_task"})
def my_periodic_task():
pass
या CELERYBEAT_SCHEDULE
सेटिंग के साथ:
CELERYBEAT_SCHEDULE = {name: {"task": task_name,
"options": {"task_id": name}}}
आप बस एक आवधिक कार्य आप निकालना चाहते हैं कोडबेस से @periodic_task
हटाएं, या CELERYBEAT_SCHEDULE
से प्रविष्टि को हटा दें। यदि आप Django डेटाबेस शेड्यूलर का उपयोग कर रहे हैं तो आपको Django Admin इंटरफ़ेस से आवधिक कार्य को निकालना होगा।
PS1: revoke
कोई कार्य शुरू नहीं किया गया है जो पहले ही शुरू हो चुका है। यह केवल कार्यों को रद्द करता है जो अभी तक शुरू नहीं हुए हैं। आप revoke(task_id, terminate=True)
का उपयोग कर एक चल रहे कार्य को समाप्त कर सकते हैं। डिफ़ॉल्ट रूप से यह TERM
सिग्नल प्रक्रिया को भेज देगा, यदि आप एक और सिग्नल भेजना चाहते हैं (उदा। किल) revoke(task_id, terminate=True, signal="KILL")
का उपयोग करें।
पीएस 2: निरस्त रिमोट कंट्रोल कमांड है इसलिए इसे केवल RabbitMQ और रेडिस ब्रोकर ट्रांसपोर्ट द्वारा समर्थित किया जाता है। आप अपने काम के लिए एक डेटाबेस में एक cancelled
झंडा भंडारण के द्वारा रद्द आप ऐसा करना चाहिए समर्थन करना चाहते हैं और काम है कि झंडा जाँच जब यह शुरू होता है है, तो:
from celery.task import Task
class RevokeableTask(Task):
"""Task that can be revoked.
Example usage:
@task(base=RevokeableTask)
def mytask():
pass
"""
def __call__(self, *args, **kwargs):
if revoke_flag_set_in_db_for(self.request.id):
return
super(RevokeableTask, self).__call__(*args, **kwargs)
इस बेहद गहन उत्तर के लिए धन्यवाद। –