У мене є 60 Гб масиву SciPy (матриця), я повинен ділитися між 5+ multiprocessing
Process
об’єктами. Я бачив numpy-sharedmem і читав цю дискусію в списку SciPy. Здається, існує два підходи - numpy-sharedmem
і використання a multiprocessing.RawArray()
та відображення NumPy dtype
s у ctype
s. Зараз, numpy-sharedmem
здається, це шлях, але я ще не бачив хорошого довідкового прикладу. Мені не потрібні будь-які замки, оскільки масив (насправді матриця) буде лише для читання. Тепер, через його розмір, я хотів би уникати копії. Це звучить , як правильний метод , щоб створити лише копію масиву у вигляді sharedmem
масиву, а потім передати його на Process
об'єкти? Кілька конкретних питань:
Який найкращий спосіб насправді передавати дескриптори спільного мему в підтеки
Process()
? Чи потрібна мені черга, щоб просто передати один масив? Чи була б труба краще? Чи можу я просто передати його як аргументProcess()
ініціюванню підкласу (де я припускаю, що він маринований)?У дискусії, яку я зв’язав вище, згадується про
numpy-sharedmem
те, що він не є 64-бітовим? Я точно використовую деякі структури, які не є 32-розрядними адресними.Чи є компроміси у
RawArray()
підході? Повільніше, баггі?Чи потрібне мені відображення ctype-to-dtype для методу numpy-sharedmem?
Хтось має приклад того, як це робить код OpenSource? Я дуже практичний вчитель, і важко змусити це працювати, не маючи жодного хорошого прикладу.
Якщо є якась додаткова інформація, яку я можу надати, щоб допомогти пояснити це іншим, будь ласка, прокоментуйте, і я додаю. Дякую!
Це має працювати на Ubuntu Linux і, можливо, Mac OS, але портативність не викликає великих проблем.
multiprocessing
зробити копію всього цього для кожного процесу.