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