简而言之,我有一个(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(),但仍然看不到解决方案。
答案 0 :(得分:0)
我相信在这种情况下,python多处理模块将通过复制该函数中的所有变量来捕获该函数的关闭。
有几种解决方法,但是您需要将每一行(或该行的索引)传递给每个线程,以避免复制整个数组。结合起来,您将需要在对每个线程进行排序之后建立一种用于存储/修改整个数组的机制。您可以使用文件,也可以在多处理中引用this question作为共享对象。