Ant*_*Bak 5 python numpy shared-memory multiprocessing
我有一个numpy数组,我想以一种不涉及副本的方式在一堆python进程之间共享.我使用sharedmem包从现有的numpy数组创建一个共享的numpy数组.
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
Run Code Online (Sandbox Code Playgroud)
我的问题是每个子进程都需要访问随机分布在数组中的行.目前,我使用sharedmem包创建一个共享的numpy数组,并将其传递给每个子进程.每个进程还有一个需要访问的行列表idx.当我这样做时,问题在于子进程:
#idx = list of randomly distributed integers
local_array = shared_array[idx,:]
# Do stuff with local array
Run Code Online (Sandbox Code Playgroud)
它创建了数组的副本,而不仅仅是另一个视图.该数组非常大并且在共享之前首先对其进行操作,以便每个进程访问一系列连续的行
local_array = shared_array[start:stop,:]
Run Code Online (Sandbox Code Playgroud)
花了太长时间.
问题:在不涉及复制数组的python进程之间共享对numpy数组的随机访问有什么好的解决方案?
子进程需要只读访问(因此无需锁定访问).