में सीपीयू-होगिंग प्लगइन खोजें मेरे पास पाइथन में लिखा गया एक सिस्टम है जो कई डेवलपर्स द्वारा लिखे गए प्लग-इन का उपयोग करके डेटा की बड़ी मात्रा में अनुभव करता है।मल्टीथ्रेडेड पायथन
असल में, एप्लिकेशन कई कार्यकर्ता धागे शुरू करता है, फिर उन्हें डेटा खिलाता है। प्रत्येक थ्रेड प्लगइन को किसी आइटम के लिए उपयोग करने के लिए निर्धारित करता है और आइटम को संसाधित करने के लिए कहता है। एक प्लग-इन एक विशिष्ट फ़ंक्शन परिभाषित एक पायथन मॉड्यूल है। प्रसंस्करण में आमतौर पर नियमित अभिव्यक्ति शामिल होती है, और इसे एक या उससे अधिक समय नहीं लेना चाहिए।
कभी-कभी, प्लगइन में से एक को मिनट पूरा करने के लिए, पूरे समय के लिए CPU पर 100% पर pegging ले जाएगा। यह आम तौर पर उस डेटा आइटम के साथ जोड़ा गया उप-इष्टतम नियमित अभिव्यक्ति के कारण होता है जो उस अक्षमता का खुलासा करता है।
यह वह जगह है जहां चीजें मुश्किल हो जाती हैं। अगर मुझे दोषी है कि अपराधी कौन है, तो मैं इसके कोड की जांच कर सकता हूं और समस्या ढूंढ सकता हूं। हालांकि, कभी-कभी मैं बहुत भाग्यशाली नहीं हूं।
- मैं सिंगल थ्रेडेड नहीं जा सकता। यदि मैं करता हूं तो समस्या को दोबारा उत्पन्न करने के लिए यह शायद सप्ताह ले जाएगा।
- प्लगइन पर एक टाइमर डालने से मदद नहीं मिलती है, क्योंकि जब यह जम जाता है तो यह जीआईएल लेता है, और अन्य सभी प्लगइन को पूरा करने में कुछ मिनट लगते हैं।
- (यदि आप सोच रहे थे, SRE engine doesn't release the GIL)।
- जहां तक मैं profiling बता सकता हूं, मल्टीथ्रेडिंग के दौरान बहुत बेकार है।
मल्टीप्रोसेसिंग में पूरे आर्किटेक्चर को फिर से लिखने का छोटा, किसी भी तरह से मैं यह पता लगा सकता हूं कि मेरे सभी सीपीयू कौन खा रहे हैं?
जोड़ा: जवाब में कुछ टिप्पणियों के लिए:
क्योंकि प्रोफाइलर कुल समारोह समय का है और सक्रिय नहीं CPU समय उपयोगी नहीं है अजगर में बहु कोड रूपरेखा। मेरा मतलब क्या है इसका देखने के लिए cProfile.run ('time.sleep (3)') आज़माएं। (rog पर क्रेडिट [अंतिम टिप्पणी])।
सिंगल थ्रेडेड जाने का कारण मुश्किल है क्योंकि 20,000 में केवल 1 आइटम समस्या पैदा कर रहा है, और मुझे नहीं पता कि यह कौन सा है। मल्टीथ्रेड चलाने से मुझे लगभग एक घंटे में 20,000 आइटमों से गुज़रने की अनुमति मिलती है, जबकि सिंगल थ्रेडेड में अधिक समय लग सकता है (इसमें बहुत सारी नेटवर्क विलंबता शामिल है)। कुछ और जटिलताओं हैं जिन्हें मैं अभी नहीं लेना चाहता हूं।
जिसके अनुसार, यह नहीं एक बुरा विचार विशिष्ट कोड है कि प्लग इन कॉल क्रमानुसार करने की कोशिश है, इसलिए एक की कि समय दूसरों के समय को प्रभावित नहीं होंगे। मैं कोशिश करूँगा और वापस रिपोर्ट करूंगा।
बहुभाषी द्वारा प्रोफाइलिंग जानकारी का कौन सा हिस्सा गड़बड़ हो रहा है? –
क्या आप कृपया बता सकते हैं कि सिंगल-थ्रेडेड क्यों काम नहीं करेगा? यदि प्लग-इन किसी भी तरह से जीआईएल को कभी भी जारी नहीं करते हैं, तो आपके पास कोई समांतर प्रसंस्करण नहीं होगी और इसे बहु-थ्रेड किए जाने में मदद नहीं होगी। –
"मैं सिंगल थ्रेडेड नहीं जा सकता। अगर मैं ऐसा करता हूं तो समस्या को पुन: पेश करने में शायद सप्ताह लगेंगे"; गलत। शायद सिंगल थ्रेडेड होने पर आपको थ्रेड की तुलना में तेजी से परिणाम मिलेगा। – nosklo