我想出了解决该问题的方法。在初始化多处理实例之前,将Numpy与BLAS一起使用时会发生此问题。我的解决方法只是将Numpy代码(运行BLAS)放入单个进程中,然后再运行多处理实例。这不是一种很好的编码样式,但是可以。请参见下面的示例:
以下 *** 作将失败-Python将退出:
import numpy as npfrom multiprocessing import Pool, Processdef test(x): arr = np.dot(x.T,x) # On large matrices, this calc will use BLAS.if __name__ == '__main__': x = np.random.random(size=((2000,500))) # Random matrix test(x) evaluations = [x for _ in range(5)] p = Pool() p.map_async(test,evaluations) # This is where Python will quit, because of the prior use of BLAS. p.close() p.join()
以下将成功:
import numpy as npfrom multiprocessing import Pool, Processdef test(x): arr = np.dot(x.T,x) # On large matrices, this calc will use BLAS.if __name__ == '__main__': x = np.random.random(size=((2000,500))) # Random matrix p = Process(target = test,args = (x,)) p.start() p.join() evaluations = [x for _ in range(5)] p = Pool() p.map_async(test,evaluations) p.close() p.join()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)