2012-03-28 29 views
11

पिछले निष्पादन पूरा होने से पहले सेलेरी को आवधिक कार्य निष्पादित करने से कैसे रोकें?सेलेरी कार्य को कैसे सुनिश्चित किया जा सकता है सेलेरी कार्य निष्पादन ओवरलैपिंग रोक रहा है

मेरे पास सर्वरों का समूह है, जो एक सामान्य डेटाबेस सर्वर से जुड़ा हुआ है, सेलेरी कार्यों को निष्पादित करता है, और मुझे लगता है कि प्रत्येक सर्वर कभी-कभी एक ही कार्य को साथ-साथ एक ही कार्य को एक ही कार्य को चलाने के साथ-साथ एक ही कार्य चला सकता है। यह कई दौड़ की स्थिति पैदा कर रहा है जो दर्दनाक सूक्ष्म तरीकों से मेरे डेटा को दूषित कर रहे हैं।

मैं Celery's docs के माध्यम से पढ़ रहा हूं, लेकिन मुझे कोई विकल्प नहीं मिल रहा है जो स्पष्ट रूप से इसकी अनुमति देता है। मुझे similar question मिला, लेकिन सुझाया गया फ़िक्स एक हैक जैसा प्रतीत होता है, क्योंकि यह Django के कैशिंग फ्रेमवर्क पर निर्भर करता है, और इसलिए क्लस्टर में सभी सर्वरों द्वारा साझा नहीं किया जा सकता है, जिससे कई सर्वर एक ही समय में एक ही कार्य को निष्पादित कर सकते हैं।

क्या सेलेरी में डेटाबेस में कौन से कार्य चल रहे हैं रिकॉर्ड करने के लिए कोई विकल्प है, और डेटाबेस रिकॉर्ड को साफ़ होने तक फिर से नहीं चलाया जाता है?

मैं Django-अजवाइन मॉड्यूल का उपयोग कर रहा है, और यह पृष्ठों प्रदान करता है, भले ही/व्यवस्थापक/djcelery/taskstate/और/व्यवस्थापक/djcelery/workerstate /, मैं कभी नहीं किसी भी लंबे समय से चल रहे कार्यों या श्रमिकों देखा है वहां दिखाओ

उत्तर

2

यदि मैं आप थे तो मैं किसी भी नौकरियों के लिए एक विशेष कतार स्थापित करता हूं जिसे एक साथ निष्पादित नहीं किया जा सकता है। फिर आप बस उस कतार के लिए एक अलग कार्यकर्ता शुरू कर सकते हैं।

3

मानक तरीका django मानक कैश तंत्र के माध्यम से साझा लॉक का उपयोग करना है। आधिकारिक दस्तावेज से this recipe देखें

+0

और जैसा कि मैंने उल्लेख किया है, यह क्लस्टर सेटिंग में एक मजबूत तंत्र नहीं है ... डेटाबेस का उपयोग करने का कोई विकल्प क्यों नहीं है? – Cerin

+0

memcached बैकएंड का उपयोग करें और आपको क्लस्टर कार्यक्षमता –

+1

@AlexLebedev मिल जाएगी, यह एक अच्छा बिंदु है, लेकिन * अगर और केवल अगर * क्लस्टर में मशीन बैकएंड साझा करती हैं। उदाहरण के लिए, स्थानीय स्तर पर memcached चलाने के लिए असंभव नहीं है और प्रत्येक बॉक्स पर एक स्थानीयहोस्ट memcached बैकएंड का उपयोग करें। तर्कसंगत रूप से स्पष्ट है, लेकिन मैं बस इसे इंगित करना चाहता था कि कोई भी सोच न सके "ओह, मैं memcached का उपयोग कर रहा हूँ, समस्या हल हो गई।" – mrooney

संबंधित मुद्दे