如何使用多个进程并行生成numpy矩阵?

时间:2019-07-17 04:00:00

标签: python numpy multiprocessing python-multiprocessing

尝试使用跨不同流程的工作人员制作数据,并将其返回到原始流程。有没有一种方法可以预分配一些我们可以在进程中写入的共享内存?

特别是,每个工作人员将制作一个大小介于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')        

代码被内核杀死。

0 个答案:

没有答案