У меня есть 60-килобайтный массив SciPy (матрица), который я должен использовать между объектами 5+ multiprocessing
Process
. Я видел numpy-sharedmem и читал эту дискуссию в списке SciPy. Кажется, что существует два подхода - numpy-sharedmem
и использование multiprocessing.RawArray()
и отображение NumPy dtype
в ctype
s. Теперь, numpy-sharedmem
, кажется, путь, но я еще не видел хороший ссылочный пример. Мне не нужны никакие блокировки, так как массив (на самом деле матрица) будет доступен только для чтения. Теперь, из-за его размера, я бы хотел избежать копирования. Похоже, правильный метод состоит в том, чтобы создать единственную копию массива как массив sharedmem
, а затем передать его объектам Process
? Несколько конкретных вопросов:
-
Каков наилучший способ передачи дескриптора sharedmem суб-
Process()
es? Нужна ли мне очередь для прохождения одного массива? Будет ли труба лучше? Могу ли я просто передать его в качестве аргумента для подклассаProcess()
init (где я предполагаю, что он маринован)? -
В обсуждении, которое я упомянул выше, упоминается
numpy-sharedmem
, не обладающее 64-битной безопасностью? Я определенно использую некоторые структуры, которые не являются 32-разрядными адресуемыми. -
Есть ли компромисс с подходом
RawArray()
? Медленно, buggier? -
Нужно ли мне сопоставление ctype-to-dtype для метода numpy-sharedmem?
-
Есть ли у кого-нибудь пример кода OpenSource? Я очень практикован, и мне трудно заставить это работать без какого-либо хорошего примера, чтобы посмотреть.
Если есть дополнительная информация, которую я могу предоставить, чтобы помочь прояснить это для других, прокомментируйте, и я добавлю. Спасибо!
Это нужно запускать на Ubuntu Linux и, возможно, в Mac OS, но переносимость не вызывает большого беспокойства.