У меня есть пустой массив, который я хотел бы разделить между несколькими процессами Python таким образом, чтобы не использовать копии. Я создаю общий массив NumPy из существующего массива NUMPY, используя пакет sharedmem .
import sharedmem as shm
def convert_to_shared_array(A):
shared_array = shm.shared_empty(A.shape, A.dtype, order="C")
shared_array[...] = A
return shared_array
Моя проблема заключается в том, что каждому подпроцессу требуется доступ к строкам, которые случайно распределены в массиве. В настоящее время я создаю общий массив numpy с помощью пакета sharedmem и передаю его каждому подпроцессу. У каждого процесса также есть список idx строк, к которым он должен получить доступ. Проблема в подпроцессе, когда я делаю:
#idx = list of randomly distributed integers
local_array = shared_array[idx,:]
# Do stuff with local array
Создает копию массива, а не просто другое представление. Массив довольно большой и манипулирует им в первую очередь, прежде чем делиться им, так что каждый процесс получает доступ к непрерывному диапазону строк, например
local_array = shared_array[start:stop,:]
занимает слишком много времени.
Вопрос: Каковы хорошие решения для совместного использования произвольного доступа к пустому массиву между процессами python, которые не включают копирование массива?
Подпроцессам необходим доступ только для чтения (поэтому нет необходимости блокировать доступ).