Многопроцессорность Python для параллельных процессов

Извините, если это слишком просто для некоторых, но я все еще не понимаю фокус с многопроцессорной обработкой Python. Я прочитал
http://docs.python.org/dev/library/multiprocessing
http://pymotw.com/2/multiprocessing/basics.html и множество других руководств и примеров, которые дает мне Google ... многие из них тоже отсюда.

Что ж, моя ситуация такова, что мне нужно вычислить много матриц numpy, и мне нужно впоследствии сохранить их в одной матрице numpy. Скажем, я хочу использовать 20 ядер (или что я могу использовать 20 ядер), но мне не удалось успешно использовать ресурс пула, поскольку он поддерживает процессы до тех пор, пока пул не «умрет».Итак, я подумал о том, чтобы сделать что-то вроде этого:

from multiprocessing import Process, Queue  
import numpy as np  

def f(q,i):  
     q.put( np.zeros( (4,4) ) ) 

if __name__ == '__main__':   
     q = Queue()   
     for i in range(30):   
          p = Process(target=f, args=(q,))  
          p.start()  
          p.join()  
     result = q.get()  
     while q.empty() == False:
          result += q.get()  
     print result

но тогда похоже, что процессы работают не параллельно, а работают последовательно (пожалуйста, поправьте меня, если я ошибаюсь), и я не знаю, умирают ли они после того, как они выполняют свои вычисления (так что для более чем 20 процессов те, которые выполнили свою роль, оставляют ядро ​​свободным для другого процесса). Кроме того, для очень большого числа (скажем, 100000) хранение всех этих матриц (которые могут быть очень большими) в очереди будет использовать много памяти, делая код бесполезным, поскольку идея состоит в том, чтобы помещать каждый результат на каждой итерации. в конечном результате, как при использовании блокировки (и ее методов acqu () и release ()), но если этот код не для параллельной обработки, блокировка тоже бесполезна ...

Я надеюсь, что кто-нибудь может мне помочь .

Заранее спасибо!

9
задан twasbrillig 2 November 2014 в 13:51
поделиться