python多处理内存溢出

时间:2018-08-24 22:41:10

标签: python parallel-processing multiprocessing

简而言之,我有一个(1000 x 500000)矩阵,理想情况下,我需要按行对它进行排序。并行处理应该可以工作,但是python中的多处理模块似乎每次都复制整个矩阵进程产生,导致RAM溢出。我该如何解决这个问题..?

def sort_parallel(n):
    y[n].sort(key=lambda y:-y[1])

if __name__ == '__main__':
    pool = Pool(processes=2)  
    pool.apply(sort_parallel,range(0,len(y)))
    pool.close()    
    pool.join()

在遇到类似问题之后,尝试了map,map_async,apply_async,但没有任何进展,根本的问题似乎是每个进程的列表副本。..这会充斥RAM,可以通过只读操作来防止,但是因为我正在就地排序..这对我没有帮助。还尝试了sorted()而不是sort(),但仍然看不到解决方案。

1 个答案:

答案 0 :(得分:0)

我相信在这种情况下,python多处理模块将通过复制该函数中的所有变量来捕获该函数的关闭。

有几种解决方法,但是您需要将每一行(或该行的索引)传递给每个线程,以避免复制整个数组。结合起来,您将需要在对每个线程进行排序之后建立一种用于存储/修改整个数组的机制。您可以使用文件,也可以在多处理中引用this question作为共享对象。