Python - Разделить массив массивов между процессами?

Я хотел бы использовать модуль python's multiprocessing для использования многоядерного Linux-сервера.

Мне нужно, чтобы все процессы имели доступ на чтение и запись в одну и ту же разделяемую память.

Вместо использования list или queue возможно ли иметь многомерный массив numpy как общий объект?

Ответ 1

Посмотрите этот. Мне кажется нелегко, но это выполнимо.

Ответ 2

Я думаю, что знаю, что вы ищете: https://bitbucket.org/cleemesser/numpy-sharedmem/issue/3/casting-complex-ndarray-to-float-in

На веб-странице написано краткое описание: модуль общей памяти для numpy от Sturla Molden и G. Varoquaux, который позволяет легко обмениваться памятью между процессами в виде массивов NumPy. Первоначально опубликовано в список рассылки пользователей SciPy.

Я сам использую его именно так. Совместное использование массивов NumPy между процессами. Хорошо работает для меня.

Ответ 3

Я обнаружил, что даже если вы не измените свой массив numpy после fork(), связав кучу дочерних процессов, вы по-прежнему будете видеть, что ваш RAM skyrocket по-детски обрабатывает объект copy-on-write.

Вы можете ограничить (или полностью устранить?) эту проблему, установив

"yourArray.flags.writeable = False"

ПЕРЕД НАЧАЛОМ fork() 'ing/Pool(), который, по-видимому, сохраняет используемую ОЗУ и меньше LOS меньше, чем другие методы:)