尝试使用跨不同流程的工作人员制作数据,并将其返回到原始流程。有没有一种方法可以预分配一些我们可以在进程中写入的共享内存?
特别是,每个工作人员将制作一个大小介于1,1到10,10之间的随机矩阵(该大小是在该工作人员内部随机选择的)。该程序不返回并且被服务器杀死。有什么办法可以使它变得更好?
我尝试从worker和共享字典中返回共享的numpy数组,它们将汇总返回的数组。
from multiprocessing import Manager
manager = Manager()
classwise_pdist = manager.dict()
def make_dist_array_mp2(k):
keys = range(k*intvl,(k+1)*intvl)
for ki in keys:
sz1,sz2 = np.random.randint(low=1,high=max_sz) ,np.random.randint(low=1,high=max_sz)
#-----------------------------------------------------------------------
# dist_array = np.random.randn(sz1,sz2).astype(np.float32).flatten()
if 'mpArray':
dist_array = multiprocessing.Array(ctypes.c_double,memoryview(np.random.randn(sz1,sz2).astype(np.float32).flatten()))
dist_array = np.frombuffer(dist_array.get_obj())
# dist_array[:] =
# print(dist_array.shape,sz1,sz2)
dist_array = dist_array.reshape((sz1,sz2))
#-----------------------------------------------------------------------
classwise_pdist[ki] = dist_array
with CodeTimer('Multiprocessing Data with Proxy'):
with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
pool.map(make_dist_array_mp2,[k for k in range(multiprocessing.cpu_count())])
print(len(classwise_pdist.keys()))
print('Made Data')
代码被内核杀死。