मेरे पास एक 60GB SciPy Array (मैट्रिक्स) है जिसे मुझे 5+ multiprocessing
Process
वस्तुओं के बीच साझा करना चाहिए । मैंने सुन्न-साझा देखा और SciPy सूची पर इस चर्चा को पढ़ा । वहाँ दो दृष्टिकोण लग रहे हैं - numpy-sharedmem
और एक multiprocessing.RawArray()
और मैपिंग करने के लिए NumPy dtype
s का उपयोग करना ctype
। अब, numpy-sharedmem
जाने का रास्ता प्रतीत होता है, लेकिन मुझे एक अच्छा संदर्भ उदाहरण देखना बाकी है। मुझे किसी भी प्रकार के ताले की आवश्यकता नहीं है, क्योंकि सरणी (वास्तव में एक मैट्रिक्स) केवल-पढ़ने के लिए होगी। अब, इसके आकार के कारण, मैं एक प्रति से बचना चाहूंगा। ऐसा लगता है कि सही विधि एक सरणी के रूप में सरणी की एकमात्र प्रतिलिपि बनाने के लिए है sharedmem
, और फिर इसे Process
वस्तुओं को पास करें? कुछ विशिष्ट प्रश्न:
वास्तव में सब-एसईएम को साझा करने के लिए सबसे अच्छा तरीका क्या है
Process()
? क्या मुझे केवल एक सरणी को पास करने के लिए एक कतार की आवश्यकता है? क्या एक पाइप बेहतर होगा? क्या मैं इसेProcess()
उपवर्ग के तर्क के तर्क के रूप में पारित कर सकता हूं (जहां मैं इसे ग्रहण कर रहा हूं)?ऊपर चर्चा में, मैं
numpy-sharedmem
64 बिट सुरक्षित नहीं होने का उल्लेख है ? मैं निश्चित रूप से कुछ संरचनाओं का उपयोग कर रहा हूं जो 32-बिट पते योग्य नहीं हैं।वहाँ व्यापार के
RawArray()
दृष्टिकोण के लिए कर रहे हैं? धीमी, बगेरियर?क्या मुझे सुन्न-साममी विधि के लिए किसी भी ctype-to-dtype मानचित्रण की आवश्यकता है?
क्या किसी के पास ऐसा कुछ OpenSource कोड का उदाहरण है? मैं बहुत पढ़ा हुआ हूं और यह देखने के लिए किसी भी तरह के अच्छे उदाहरण के बिना काम करना मुश्किल है।
यदि कोई अतिरिक्त जानकारी है, तो मैं इसे दूसरों के लिए स्पष्ट करने में मदद कर सकता हूं, कृपया टिप्पणी करें और मैं जोड़ दूंगा। धन्यवाद!
इसके लिए उबंटू लिनक्स और शायद मैक ओएस पर चलना होगा , लेकिन पोर्टेबिलिटी एक बड़ी चिंता नहीं है।
multiprocessing
तो प्रत्येक प्रक्रिया के लिए पूरी चीज़ की प्रतिलिपि बनाने की अपेक्षा करें।