ฉันมี SciPy Array (เมทริกซ์) 60GB ฉันต้องแชร์ระหว่างmultiprocessing Processวัตถุมากกว่า5 ชิ้น ฉันเคยเห็น numpy-sharedmem และอ่านการสนทนานี้ในรายการ SciPy ดูเหมือนจะมีสองวิธีคือnumpy-sharedmemใช้ a multiprocessing.RawArray()และแมป NumPy dtypes ถึงctypes ตอนนี้numpy-sharedmemดูเหมือนจะเป็นทางไป แต่ฉันยังไม่เห็นตัวอย่างอ้างอิงที่ดี ฉันไม่ต้องการการล็อกใด ๆ เนื่องจากอาร์เรย์ (จริงๆแล้วคือเมทริกซ์) จะเป็นแบบอ่านอย่างเดียว ตอนนี้เนื่องจากขนาดของมันฉันต้องการหลีกเลี่ยงการทำสำเนา มันเสียงเหมือนวิธีที่ถูกต้องคือการสร้างเพียงสำเนาของอาร์เรย์เป็นsharedmemอาร์เรย์แล้วส่งผ่านไปยังProcessวัตถุ? คำถามเฉพาะสองสามข้อ:
อะไรคือวิธีที่ดีที่สุดในการส่งแฮนเดิลแชร์ไปยัง
Process()รายการย่อย ฉันต้องการคิวเพื่อส่งอาร์เรย์หนึ่งรอบหรือไม่? ท่อจะดีกว่าไหม? ฉันสามารถส่งเป็นอาร์กิวเมนต์ไปยังProcess()init ของคลาสย่อยได้หรือไม่ (โดยที่ฉันสมมติว่ามันถูกดอง)ในการสนทนาที่ฉันเชื่อมโยงไว้ข้างต้นมีการระบุว่า
numpy-sharedmemไม่ปลอดภัย 64 บิต? ฉันกำลังใช้โครงสร้างบางอย่างที่ไม่สามารถระบุแอดเดรสแบบ 32 บิตได้มีข้อแลกเปลี่ยนกับ
RawArray()แนวทางนี้หรือไม่? ช้ากว่า buggier?ฉันต้องการการแมป ctype-to-dtype สำหรับเมธอด numpy-sharedmem หรือไม่?
ใครมีตัวอย่างโค้ด OpenSource ที่ทำแบบนี้บ้าง? ฉันเรียนรู้แบบลงมือปฏิบัติจริงและเป็นการยากที่จะทำงานนี้โดยไม่มีตัวอย่างที่ดีให้ดู
หากมีข้อมูลเพิ่มเติมที่ฉันสามารถให้เพื่อช่วยชี้แจงเรื่องนี้ให้กับผู้อื่นโปรดแสดงความคิดเห็นและฉันจะเพิ่ม ขอบคุณ!
สิ่งนี้จำเป็นต้องทำงานบน Ubuntu Linux และอาจเป็น Mac OS แต่การพกพาไม่ใช่เรื่องใหญ่
multiprocessingจะทำสำเนาของสิ่งทั้งหมดสำหรับแต่ละกระบวนการ