Wednesday, 15 July 2015

python - Multiprocessing : More processes than cpu.count -


नोट : मैंने मल्टीप्रोसेसिंग 2 की भूमि में "धावा" दिन पहले। तो मेरी समझ बहुत बुनियादी है।

मैं लिख रहा हूँ और अपलोड अमेज़न एस 3 बाल्टी के लिए आवेदन यदि फ़ाइल आकार बड़ा है ( 100mb ), Ive pool से multiprocessing मॉड्यूल से समानांतर अपलोड लागू किए हैं I मैं कोर i7 के साथ एक मशीन का उपयोग कर रहा हूं, मेरे पास cpu_count का 8 था। मैं इस धारणा के तहत था कि अगर मैं pool = pool (process = 6) मैं 6 कोर का उपयोग करता हूं और फाइल को भागों में अपलोड करना शुरू होता है और पहले 6 के लिए अपलोड करता है भागों एक साथ शुरू होता है यह देखने के लिए कि जब प्रक्रिया cpu_count से अधिक है, तब मैंने क्या किया (20 का अर्थ है कि मैं 20 कोर का उपयोग करना चाहता हूं)। त्रुटियों के एक ब्लॉक को प्राप्त करने की बजाय मेरी आश्चर्य के लिए कार्यक्रम के साथ 20 भागों को एक साथ अपलोड करना शुरू किया (मैं बहुत से भागों में यकीन है कि यह सुनिश्चित करने के लिए मैं एक छोटे चक आकार का इस्तेमाल किया) मैं इस व्यवहार को समझ नहीं करता मेरे पास केवल 8 कोर है, तो कैसे वह प्रोग्राम 20 के इनपुट को स्वीकार कर सकता है? जब मैं कहता हूँ प्रक्रिया = 6 , क्या यह वास्तव में 6 धागे का उपयोग करता है ?? कौन सा एकमात्र स्पष्टीकरण हो सकता है 20 एक मान्य इनपुट है क्योंकि थ्रेड्स के 1000s भी हो सकते हैं। कोई मुझे इसकी व्याख्या कर सकता है।

संपादित करें:

मैंने कोड को 'से उधार लिया है' मैंने इसे केवल थोड़ा बदल दिया है जिसमें मैं उपयोगकर्ता को अपनी पसंद के लिए मुख्य कोड के लिए parallel_processes से 4

आपके कंप्यूटर पर एक साथ चलने वाली प्रक्रियाओं की संख्या कोर की संख्या से सीमित नहीं होती है वास्तव में आपके पास संभवतः आपके कंप्यूटर पर चलने वाले सैकड़ों प्रोग्राम हैं - प्रत्येक अपनी स्वयं की प्रक्रिया के साथ यह काम करने के लिए ओएस आपके प्रत्येक प्रोसेसर में से एक को प्रोसेसर्स को प्रत्येक प्रक्रिया या धागा को अस्थायी रूप से आवंटित करता है - कुछ बिंदु पर इसे रोका जा सकता है और दूसरी प्रक्रिया इसकी जगह ले सकती है। यदि आप अधिक जानकारी प्राप्त करना चाहते हैं, तो देखें।

संपादित करें: अपने अपलोड करने के उदाहरण में अधिक प्रक्रियाएं निर्दिष्ट करना या समझ नहीं सकता हो डिस्क से पढ़ना और नेटवर्क पर भेजना आम तौर पर अजगर में एक अवरुद्ध ऑपरेशन है। एक ऐसी प्रक्रिया जो पढ़ने या भेजे जाने वाले डेटा के अपने हिस्से के लिए प्रतीक्षा करता है, रोक दी जा सकती है ताकि एक और प्रक्रिया आईओ शुरू कर सके। दूसरी ओर, कई प्रक्रियाओं के साथ या तो I / O या नेटवर्क I / O फ़ाइल एक अवरोधक बन जाती है और आपका प्रोग्राम प्रक्रिया स्विचिंग के लिए अतिरिक्त ओवरहेड की वजह से धीमा हो जाता है।


No comments:

Post a Comment