代码之家  ›  专栏  ›  技术社区  ›  Ajay V

python多处理内存溢出

  •  0
  • Ajay V  · 技术社区  · 8 年前

    简言之,我有一个(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()
    

    1 回复  |  直到 8 年前
        1
  •  0
  •   Kevin He    8 年前

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

    有几种方法可以解决这个问题,但是您需要将每一行(或行的索引)传递给每个线程,以避免复制整个数组。同时,您需要建立一种机制,以便在完成对每个线程的排序后存储/修改整个数组。您可以使用文件,也可以引用 this question 对于多处理中的共享对象。