Извините, если это слишком просто для некоторых, но я все еще не понимаю фокус с многопроцессорной обработкой 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 ()), но если этот код не для параллельной обработки, блокировка тоже бесполезна ...
Я надеюсь, что кто-нибудь может мне помочь .
Заранее спасибо!