我想将数组用于共享内存。问题是程序的结构是这样的,即在我知道共享数组的大小之前生成子进程。如果我发送消息来扩展数组没有任何反应,如果我尝试发送共享数组本身,我会收到错误。下面是一个小脚本来演示我的问题。
import multiprocessing as mp
import numpy as np
def f(a,pipe):
while True:
message, data = pipe.recv()
if message == 'extend':
a = np.zeros(data)
print a
elif message == 'exit':
break
if __name__ == '__main__':
unshared_arr = np.zeros(1)
a = mp.Array('d', unshared_arr)
p1,p2 = mp.Pipe()
p = mp.Process(target=f, args=(a,p2))
p.start()
p1.send(('extend', 10))
p1.send(('exit', None))
p.join()
b = np.frombuffer(a.get_obj())
答案 0 :(得分:0)
尝试:
unshared_Arr = mp.Array(ctypes.c_uint8,SIZE_NEEDED) #should be size
#and not the array itself
np_shared = np.frombuffer(ushared_Arr.get_obj(),dtype=ctypes.c_uint8)
np_shared.reshape(SIZE_NEEDED/2,SIZE_NEEDED/2) #or (,SIZE_NEEDED) ie. any shape
#you want as long as the allocated size
#does not change
现在使用np_shared和任何numpy数组一样。如果有多个进程需要它,你应该保持全局。