Python Использование multiprocessing.pool с mpi4py генерирует ошибку Cannot allocate memory

Я работаю над кластером компьютеров и недавно начал использовать параллельное программирование с помощью python.

В настоящее время я понимаю так: mpi4py помогает управлять работой между разными узлами, а многопроцессорность управляет работой в ядрах узла.

Я разделил большой цикл 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()), он генерирует ошибку «Не удается выделить память». Трассировка аналогична Python не может выделить память с помощью multiprocessing.pool , но решение не помогает.

Любые подсказки/помощь/объяснения приветствуются


person RohanB    schedule 24.03.2015    source источник