पायथन भाषा मल्टी-कोर सीपीयू से पहले होती है, इसलिए यह अजीब नहीं है कि यह उन्हें मूल रूप से उपयोग नहीं करता है।
इसके अतिरिक्त, सभी प्रोग्राम एकाधिक कोर से लाभ नहीं उठा सकते हैं। चरणों में की गई गणना, जहां अगला चरण पिछले चरण के परिणामों पर निर्भर करता है, अधिक कोर का उपयोग करके तेज नहीं होगा। ऐसी समस्याएं जिन्हें वेक्टरकृत किया जा सकता है (डेटा के बड़े सरणियों में समान गणना लागू करना) कई कोर का उपयोग करने के लिए अपेक्षाकृत आसान हो सकता है क्योंकि व्यक्तिगत गणना स्वतंत्र हैं।
जब आप बहुत सारी गणनाएं कर रहे हैं, तो मैं मान रहा हूं कि आप सुन्न का उपयोग कर रहे हैं ? यदि नहीं, तो इसे देखें। यह C में लिखा गया एक एक्सटेंशन है जो ATLAS जैसी अनुकूलित रैखिक बीजगणित पुस्तकालयों का उपयोग कर सकता है। यह मानक पायथन की तुलना में संख्यात्मक गणनाओं को तेज कर सकता है।
कहा जा रहा है कि, अजगर के साथ कई कोर का उपयोग करने के कई तरीके हैं।
- बिल्ट-इन
multiprocessing
मॉड्यूल है। multiprocessing.Pool
वर्ग के साथ एक से अधिक CPU भर में vectorization प्रदान करता है map()
और संबंधित तरीकों। हालांकि यहां व्यापार बंद है। यदि आपको प्रक्रियाओं के बीच बड़ी मात्रा में डेटा का संचार करना है, तो यह ओवरहेड कई कोर के लाभ को नकार सकता है।
- सुन्न के एक उपयुक्त निर्माण का उपयोग करें। यदि खसखस एक मल्टीथ्रेडिंग एटलस लाइब्रेरी के साथ बनाया गया है, तो यह बड़ी समस्याओं पर तेज होगा।
- विस्तार मॉड्यूल का उपयोग करें जैसे सुन्न , समानांतर अजगर , कोरपी या कोपेनहेगन वेक्टर बाइट कोड ।
ध्यान दें कि threading
मॉड्यूल इस संबंध में उपयोगी नहीं है। स्मृति प्रबंधन को सरल रखने के लिए, वैश्विक दुभाषिया ताला ("जीआईएल") लागू करता है कि एक समय में केवल एक धागा अजगर बाइटकोड को निष्पादित कर सकता है। हालांकि, सुन्न जैसे बाहरी मॉड्यूल आंतरिक रूप से कई थ्रेड्स का उपयोग कर सकते हैं।