Saya memiliki 60GB SciPy Array (Matrix) yang harus saya bagikan antara 5+ multiprocessing
Process
objek. Saya telah melihat numpy-sharedmem dan membaca diskusi ini di daftar SciPy. Tampaknya ada dua pendekatan - numpy-sharedmem
dan menggunakan a multiprocessing.RawArray()
dan memetakan NumPy dtype
s ke ctype
s. Sekarang, numpy-sharedmem
sepertinya cara untuk pergi, tapi saya belum melihat contoh referensi yang bagus. Saya tidak memerlukan kunci apa pun, karena array (sebenarnya matriks) akan menjadi hanya-baca. Sekarang, karena ukurannya, saya ingin menghindari salinannya. Ini terdengar seperti metode yang benar adalah untuk menciptakan hanya salinan array sebagai sharedmem
array, dan kemudian menyebarkannya ke Process
objek? Beberapa pertanyaan khusus:
Apa cara terbaik untuk benar-benar meneruskan pegangan sharedmem ke sub-
Process()
es? Apakah saya memerlukan antrian hanya untuk melewatkan satu array? Apakah pipa lebih baik? Bisakah saya meneruskannya sebagai argumen keProcess()
subkelas init (di mana saya menganggap itu acar)?Dalam diskusi yang saya tautkan di atas, ada yang menyebutkan
numpy-sharedmem
tidak aman 64bit? Saya pasti menggunakan beberapa struktur yang tidak dapat dialamatkan 32-bit.Apakah ada tradeoff untuk
RawArray()
pendekatan ini? Lebih lambat, buggier?Apakah saya memerlukan pemetaan ctype-to-dtype untuk metode numpy-sharedmem?
Apakah ada yang punya contoh beberapa kode OpenSource melakukan ini? Saya sangat mahir belajar dan sulit untuk membuatnya bekerja tanpa contoh yang baik untuk dilihat.
Jika ada info tambahan yang dapat saya berikan untuk membantu mengklarifikasi ini untuk orang lain, silakan beri komentar dan saya akan menambahkan. Terima kasih!
Ini perlu dijalankan di Ubuntu Linux dan Mungkin Mac OS, tetapi portabilitas bukanlah masalah besar.
multiprocessing
untuk membuat salinan semuanya untuk setiap proses.