Tôi có Mảng SciPy (Ma trận) 60GB, tôi phải chia sẻ giữa 5 multiprocessing
Process
đối tượng trở lên. Tôi đã xem numpy-sharedmem và đọc cuộc thảo luận này trên danh sách SciPy. Dường như có hai cách tiếp cận-- numpy-sharedmem
và sử dụng a multiprocessing.RawArray()
và ánh xạ NumPy dtype
s với ctype
s. Bây giờ, numpy-sharedmem
có vẻ là một con đường để đi, nhưng tôi vẫn chưa thấy một ví dụ tham khảo tốt. Tôi không cần bất kỳ loại khóa nào, vì mảng (thực ra là ma trận) sẽ ở chế độ chỉ đọc. Bây giờ, do kích thước của nó, tôi muốn tránh một bản sao. Có vẻ như phương pháp đúng là tạo bản sao duy nhất của mảng dưới dạng một sharedmem
mảng và sau đó truyền nó cho các Process
đối tượng? Một số câu hỏi cụ thể:
Cách tốt nhất để thực sự chuyển các điều khiển sharedmem đến các trình phụ là
Process()
gì? Tôi có cần một hàng đợi chỉ để chuyển một mảng xung quanh không? Một đường ống sẽ tốt hơn? Tôi có thể chỉ chuyển nó như một đối số choProcess()
init của lớp con (trong đó tôi cho rằng nó được chọn) không?Trong cuộc thảo luận tôi đã liên kết ở trên, có đề cập đến việc
numpy-sharedmem
không an toàn cho 64bit? Tôi chắc chắn đang sử dụng một số cấu trúc không thể địa chỉ 32 bit.Có phải đánh đổi
RawArray()
cách tiếp cận không? Chậm hơn, ồn ào hơn?Tôi có cần bất kỳ ánh xạ ctype-to-dtype nào cho phương thức numpy-sharedmem không?
Có ai có ví dụ về một số mã OpenSource làm điều này không? Tôi là một người học rất thực hành và thật khó để làm cho việc này hoạt động nếu không có bất kỳ tấm gương tốt nào để xem xét.
Nếu có bất kỳ thông tin bổ sung nào tôi có thể cung cấp để giúp làm rõ điều này cho những người khác, vui lòng nhận xét và tôi sẽ bổ sung. Cảm ơn!
Điều này cần phải chạy trên Ubuntu Linux và Có thể là Mac OS, nhưng tính di động không phải là một mối quan tâm lớn.
multiprocessing
hãy tạo một bản sao toàn bộ cho mỗi quy trình.