मैं बस django-celery का उपयोग शुरू कर रहा हूं और मैं एक डेमॉन के रूप में चलने वाले सेलरीड सेट करना चाहता हूं। instructions, हालांकि, यह सुझाव देता है कि इसे एक समय में केवल एक साइट/प्रोजेक्ट के लिए कॉन्फ़िगर किया जा सकता है। क्या सेलरीड एक से अधिक प्रोजेक्ट को संभाल सकता है, या यह केवल एक को संभाल सकता है? और, यदि यह मामला है, तो प्रत्येक कॉन्फ़िगरेशन के लिए स्वचालित रूप से प्रारंभ होने के लिए सेलरीड सेट अप करने का एक साफ तरीका है, जिसके लिए मुझे प्रत्येक के लिए एक अलग init स्क्रिप्ट बनाने की आवश्यकता है?एकाधिक django ऐप्स के साथ एक डिमन के रूप में celeryd का उपयोग कर?
उत्तर
सभी रोचक सवालों की तरह, जवाब है यह पर निर्भर करता है। :)
एक परिदृश्य के साथ आना निश्चित रूप से संभव है जिसमें दो स्वतंत्र साइटों द्वारा सेलेरीड का उपयोग किया जा सके। यदि एकाधिक साइटें एक ही एक्सचेंज में कार्य सबमिट कर रही हैं, और कार्यों को किसी विशिष्ट डेटाबेस तक पहुंच की आवश्यकता नहीं है - कहें, वे ईमेल पते, या क्रेडिट कार्ड नंबर या डेटाबेस रिकॉर्ड के अलावा कुछ अन्य पर काम करते हैं - तो एक सेलेरीड हो सकता है पर्याप्त हो। बस यह सुनिश्चित करें कि कार्य कोड किसी साझा मॉड्यूल में है जो सभी साइटों और सेलेरी सर्वर द्वारा लोड किया गया है।
आमतौर पर, आप पाएंगे कि सेलरी को डेटाबेस तक पहुंच की आवश्यकता है - या तो यह कार्य पैरामीटर के रूप में पारित आईडी के आधार पर ऑब्जेक्ट लोड करता है, या इसे डेटाबेस में कुछ बदलाव लिखना पड़ता है, या, अक्सर, दोनों। और कई साइट्स/प्रोजेक्ट आमतौर पर डेटाबेस साझा नहीं करते हैं, भले ही वे एक ही ऐप्स साझा करते हैं, इसलिए आपको कार्य कतार अलग रखना होगा।
उस स्थिति में, आमतौर पर ऐसा होगा कि आप एक एक्सचेंज ब्रोकर (उदाहरण के लिए खरगोश एमक्यू, उदाहरण के लिए) कई एक्सचेंजों के साथ स्थापित करते हैं। प्रत्येक एक्सचेंज को एक ही साइट से संदेश प्राप्त होते हैं। फिर आप प्रत्येक एक्सचेंज के लिए कहीं एक या अधिक सेलेरीड प्रक्रियाएं चलाते हैं (सेलरी कॉन्फ़िगरेशन सेटिंग्स में, आपको एक्सचेंज निर्दिष्ट करना होगा। मुझे विश्वास नहीं है कि सेलेरीड एकाधिक एक्सचेंजों को सुन सकता है)। प्रत्येक सेलरीड सर्वर अपने एक्सचेंज को जानता है, ऐप्स को लोड करना चाहिए, और डेटाबेस जिसे इसे कनेक्ट करना चाहिए।
इन्हें प्रबंधित करने के लिए, मैं cyme में देखने का सुझाव दूंगा - यह @asksol द्वारा है, और यदि आवश्यक हो तो एकाधिक सर्वरों पर एकाधिक सेलेरीड उदाहरण प्रबंधित करता है। मैंने कोशिश नहीं की है, लेकिन ऐसा लगता है कि इसे विभिन्न उदाहरणों के लिए अलग-अलग विन्यासों को संभालना चाहिए।
का प्रयास किया था नहीं लेकिन अजवाइन 3.1.x का उपयोग कर जो Django-अजवाइन की जरूरत नहीं है, दस्तावेज़ के अनुसार आप इस प्रकार का अजवाइन एप्लिकेशन का दृष्टांत कर सकते हैं:
app1 = Celery('app1')
app1.config_from_object('django.conf:settings')
app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
लेकिन आप कई शुरू करने के लिए अजवाइन बहु उपयोग कर सकते हैं प्रत्येक कॉन्फ़िगरेशन वाले श्रमिक प्रत्येक, आप उदाहरण here देख सकते हैं। आप अलग अलग --app appx मानकों के साथ कई कार्यकर्ताओं शुरू कर सकते हैं तो, तो यह अलग taks और सेटिंग्स का उपयोग करेगा:
# 3 workers: Two with 3 processes, and one with 10 processes.
$ celery multi start 3 -c 3 -c:1 10
celery worker -n [email protected] -c 10 --config celery1.py --app app1
celery worker -n [email protected] -c 3 --config celery2.py --app app2
celery worker -n [email protected] -c 3 --config celery3.py --app app3