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