2012-10-02 20 views
15

मैं 3 से 20 घंटों के बीच ईटा के साथ एक कार्य बना रहा हूं और जब मैं कार्यकर्ता लॉग को देखता हूं, तो इस कार्य के लिए , कार्यकर्ता कहता है कि "Got task from broker: ..." मूल कार्य प्राप्त होने के हर घंटे ईटा तक पहुंचने तक प्राप्त हुआ था।लंबी ईटा (8+ घंटे) के साथ अजवाइन कार्यों को एक पंक्ति में कई बार निष्पादित किया जाता है जब ईटा

मुझे पता है कि इसे BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': X} सेटिंग के साथ करना है जहां एक्स सेकंड में संख्या है।

तो मैंने दृश्यता_टाउटआउट के साथ खेला और यदि मैं इसे 1 घंटे से भी कम समय तक सेट करता हूं तो मैं कार्यकर्ता को प्रत्येक एक्स सेकंड में एक ही कार्य प्राप्त कर सकता हूं, हालांकि जब मैं visibility_timeout को एक्स तक 1 घंटे से बड़ा करता हूं तो यह रहता है मेरे द्वारा निर्धारित समय के बावजूद 1h को डिफ़ॉल्ट।

क्या कोई और इस मुद्दे पर चलता है? क्या यह एक बग पता है?

मैं अजवाइन 3.0.11 (Chiastic स्लाइड) उपयोग कर रहा हूँ Redis सर्वर संस्करण 2.4.15

+0

मैंने अभी भी इस बग का अनुभव किया है, एक रेडिस सर्वर v.2.4.6 के साथ सेलेरी v.3.0.19 चला रहा है, लेकिन यह एक कार्यकर्ता के साथ भी होता है जो Redis सर्वर के रूप में चल रहा है। – oiez

+0

इसके साथ भी देखा गया। अजवाइन == 3.0.21 django-celery == 3.0.21 पायथन 2.7.3, Redis सर्वर संस्करण 2.2.12। । एक ही मशीन पर चल रहा है। –

+0

इस बग को अजवाइन 3.1.17, रेडिस सर्वर 2.8.4 के साथ भी अनुभव कर रहा है, भले ही रेडिस और कर्मचारी दोनों एक ही मशीन पर चलें। –

उत्तर

7

संपादित साथ: किसी भी संदेश उपभोक्ता कोम्बु का उपयोग कर * एक ही Redis यूआरएल unacked संदेशों को बहाल करने में मदद मिलेगी से जुड़ा है, इसलिए आपको यह सुनिश्चित करना होगा कि उनमें से सभी उसी visibility_timeout मान के साथ कॉन्फ़िगर किए गए हैं।

एक आम गलती शुरू कर रहा है फूल इस तरह की निगरानी:

celery flower -b redis://somewhere 
बजाय इस तरह की

:

celery -A proj flower 

के रूप में पूर्व का मतलब फूल उदाहरण अजवाइन विन्यास के साथ कॉन्फ़िगर नहीं किया जा जाएगा , और उसके बाद BROKER_TRANSPORT_OPTIONS और visibility_timeout सेटिंग अनुपलब्ध हो।

इसके अलावा आपको यह भी सुनिश्चित करना होगा कि दीवार घड़ियों एनटीपी का उपयोग करके सिंक में हैं, जैसा कि नीचे दिए गए मूल उत्तर में वर्णित है।

  • कोम्बू सेलेरी द्वारा उपयोग की जाने वाली मैसेजिंग लाइब्रेरी है।

मूल जबाब:

हालांकि मैं इस तरह कुछ के बारे में नहीं सुना है, यह एक बग हो सकता है। मैंने कुछ प्रिंट स्टेटमेंट्स kombu/transport/redis.py पर यह देखने के लिए जोड़ा कि दृश्यता_टाउटआउट सही तरीके से सेट किया गया था, और यह निश्चित रूप से मेरे लिए है। परीक्षण करना कि यह एक घंटे से अधिक मूल्यों के साथ काम करता है, हालांकि अधिक समय लगेगा (लगभग 2 घंटे सटीक होने के लिए) ताकि मैं फिर से रिपोर्ट कर सकूं।

मतलब समय में आप सत्यापित कर सकता है कि आप प्रिंट बयान (redis परिवहन में restore_visible विधि के लिए उदाहरण के लिए) जोड़ने खुद

ध्यान दें कि इस सुविधा टाइम स्टांप उपयोग कर रहा है द्वारा सही ढंग से visiblity_timeout सेट कर रहे हैं, इसलिए यदि आप एक से अधिक मशीनें हैं यह महत्वपूर्ण है कि घड़ियों सिंक में काफी अधिक हैं (विशेष रूप से घंटों तक दूर नहीं जा रहे हैं)। आपको हमेशा नेटवर्क वाले सर्वर पर एनटीपी का उपयोग करना चाहिए और नियमित रूप से सिंक करना चाहिए।

+0

मैंने कॉम्बु/परिवहन/redis.py का वाद्य यंत्र किया और दृश्यता_टाउटआउट वास्तव में सही ढंग से सेट किया गया है। रेडिस सर्वर और अजवाइन कार्यकर्ता को एकल मशीन पर ले जाने से समस्या हल हो गई। मैंने पिछली मशीनों की जांच की और वे सिंक में थे (उदाहरण के लिए, दोनों पर सिस्टम समय और दिनांक समान था) – user1713317

+0

नए विवरण के साथ उत्तर अपडेट किया गया! – asksol