मैं बहुत सारे कार्यों को लिख रहा हूं जो बहुत समान हैं, और यह जानना चाहते हैं कि बॉयलरप्लेट को कम करने के लिए Task
को बेहतर तरीके से कैसे घटाया जाए। चूंकि एक कार्य केवल एक बार स्थापित होता है, इसलिए आप नीचे दिखाए गए __init__
में चीजें नहीं डाल सकते हैं, लेकिन इसे बिंदु को स्पष्ट करना चाहिए।सबक्लासिंग सेलेरी कार्य
class EmailTaskOne(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff(data)
class EmailTaskTwo(Task):
def run(self, object_id):
email_data = EmailData.objects.get(pk=object_id)
data = self.do_common_stuff(email_data)
self.do_unique_stuff2(data)
# lots more tasks like this
मैं करना चाहते हैं क्या है:
class BaseEmailTask(Task):
abstract = True
#...Insert Magic Here...
class EmailTaskOne(BaseEmailTask):
def run(self, object_id):
self.do_unique_stuff(self.data)
तो, के बाद से __init__
सही बाहर है, जहां में मैं सेटअप वर्ग कर
अमूर्त वर्ग मैं आसानी से कार्यों का एक गुच्छा परिभाषित कर सकता हूं अगर मैं कुछ चीजें करना चाहता हूं तो कुछ चीजें कारक हैं, लेकिन बॉयलरप्लेट के कुछ (बहुत सारे) object_id पर निर्भर करते हैं।
संभव डुप्लिकेट http://stackoverflow.com/questions/6393879/celery-task- तर्क पारित करने के लिए सफल रहा और-कस्टमाइज़-सजावट) – Louis
जबकि समाधान लागू है - सवाल पूछा अलग है। इस तरह, मुझे यह एक डुप्लिकेट नहीं लगता है। यदि मैं मिश्रणों और कार्यों के उत्थान का उपयोग कर अपने कार्यों की सूखापन बढ़ाने की कोशिश कर रहा था - मैं 'सजावट कलेक्टर' की तलाश नहीं करूँगा, लेकिन 'सबक्लास' या 'मिक्सिन' या ऐसा कुछ। – yarbelk