पिछले निष्पादन पूरा होने से पहले सेलेरी को आवधिक कार्य निष्पादित करने से कैसे रोकें?सेलेरी कार्य को कैसे सुनिश्चित किया जा सकता है सेलेरी कार्य निष्पादन ओवरलैपिंग रोक रहा है
मेरे पास सर्वरों का समूह है, जो एक सामान्य डेटाबेस सर्वर से जुड़ा हुआ है, सेलेरी कार्यों को निष्पादित करता है, और मुझे लगता है कि प्रत्येक सर्वर कभी-कभी एक ही कार्य को साथ-साथ एक ही कार्य को एक ही कार्य को चलाने के साथ-साथ एक ही कार्य चला सकता है। यह कई दौड़ की स्थिति पैदा कर रहा है जो दर्दनाक सूक्ष्म तरीकों से मेरे डेटा को दूषित कर रहे हैं।
मैं Celery's docs के माध्यम से पढ़ रहा हूं, लेकिन मुझे कोई विकल्प नहीं मिल रहा है जो स्पष्ट रूप से इसकी अनुमति देता है। मुझे similar question मिला, लेकिन सुझाया गया फ़िक्स एक हैक जैसा प्रतीत होता है, क्योंकि यह Django के कैशिंग फ्रेमवर्क पर निर्भर करता है, और इसलिए क्लस्टर में सभी सर्वरों द्वारा साझा नहीं किया जा सकता है, जिससे कई सर्वर एक ही समय में एक ही कार्य को निष्पादित कर सकते हैं।
क्या सेलेरी में डेटाबेस में कौन से कार्य चल रहे हैं रिकॉर्ड करने के लिए कोई विकल्प है, और डेटाबेस रिकॉर्ड को साफ़ होने तक फिर से नहीं चलाया जाता है?
मैं Django-अजवाइन मॉड्यूल का उपयोग कर रहा है, और यह पृष्ठों प्रदान करता है, भले ही/व्यवस्थापक/djcelery/taskstate/और/व्यवस्थापक/djcelery/workerstate /, मैं कभी नहीं किसी भी लंबे समय से चल रहे कार्यों या श्रमिकों देखा है वहां दिखाओ
और जैसा कि मैंने उल्लेख किया है, यह क्लस्टर सेटिंग में एक मजबूत तंत्र नहीं है ... डेटाबेस का उपयोग करने का कोई विकल्प क्यों नहीं है? – Cerin
memcached बैकएंड का उपयोग करें और आपको क्लस्टर कार्यक्षमता –
@AlexLebedev मिल जाएगी, यह एक अच्छा बिंदु है, लेकिन * अगर और केवल अगर * क्लस्टर में मशीन बैकएंड साझा करती हैं। उदाहरण के लिए, स्थानीय स्तर पर memcached चलाने के लिए असंभव नहीं है और प्रत्येक बॉक्स पर एक स्थानीयहोस्ट memcached बैकएंड का उपयोग करें। तर्कसंगत रूप से स्पष्ट है, लेकिन मैं बस इसे इंगित करना चाहता था कि कोई भी सोच न सके "ओह, मैं memcached का उपयोग कर रहा हूँ, समस्या हल हो गई।" – mrooney