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