Ответ 1
Посмотрите этот. Мне кажется нелегко, но это выполнимо.
Я хотел бы использовать модуль python's
multiprocessing
для использования многоядерного Linux-сервера.
Мне нужно, чтобы все процессы имели доступ на чтение и запись в одну и ту же разделяемую память.
Вместо использования list
или queue
возможно ли иметь многомерный массив numpy
как общий объект?
Посмотрите этот. Мне кажется нелегко, но это выполнимо.
Я думаю, что знаю, что вы ищете: https://bitbucket.org/cleemesser/numpy-sharedmem/issue/3/casting-complex-ndarray-to-float-in
На веб-странице написано краткое описание: модуль общей памяти для numpy от Sturla Molden и G. Varoquaux, который позволяет легко обмениваться памятью между процессами в виде массивов NumPy. Первоначально опубликовано в список рассылки пользователей SciPy.
Я сам использую его именно так. Совместное использование массивов NumPy между процессами. Хорошо работает для меня.
Я обнаружил, что даже если вы не измените свой массив numpy после fork(), связав кучу дочерних процессов, вы по-прежнему будете видеть, что ваш RAM skyrocket по-детски обрабатывает объект copy-on-write.
Вы можете ограничить (или полностью устранить?) эту проблему, установив
"yourArray.flags.writeable = False"
ПЕРЕД НАЧАЛОМ fork() 'ing/Pool(), который, по-видимому, сохраняет используемую ОЗУ и меньше LOS меньше, чем другие методы:)