2

我正在研究一组计算机,最近开始使用 python 进行并行编程。

我目前的理解是:mpi4py 帮助管理不同节点之间的工作,而 multiprocessing 管理节点核心中的工作。

我根据运行的 procs 的数量将一个大的 for 循环分成几部分,

comm.Get_size() = nprocs

然后尝试通过节点的cpu_count生成一个进程池,然后给它们工作。代码如下:

       if rank == proc:
            global output_dictionary
            output_dictionary = {}
            p=Pool(processes=cpu_count())                                                                                                     
            print "rank", rank, "started backpropagating. Async mapping..."
            results = []
            for key in serialize_and_divide(n_muscles,n_mn,rank,nprocs):
                r = p.apply_async(calc_neuronij_grad,key,callback=append_grads_list)
                results.append(r)
            for r in results:                                                                                                                     
                r.wait()                                                                                                                          
            p.close()
            p.join()

我的问题是代码到达 p = Pool(processes=cpu_count()) 的那一刻,它会生成错误“无法分配内存”。Traceback 与Python 无法使用 multiprocessing.pool 分配内存相同,但解决方案无济于事。

任何提示/帮助/解释表示赞赏

4

0 回答 0