2012-06-20 2 views
5

У меня есть кусок кода, какраспараллеливания умножение векторов-подобные вычислений в питоне

for i in range(0, len(a)) 
    b[i] = func(a[i]) 

, где а и Ь массивы одинаковой длины, а даются (и большой), функ есть некоторая функция который имеет множество локальных переменных, но не использует глобальных переменных.

Я хотел бы распространять вычисления func на нескольких процессорах. Предположительно мне нужно использовать модуль многопроцессорности, но я не нашел подходящих примеров. Не могли бы вы помочь? Благодарю.

+0

Какой интерпретатор Python вы используете? Обратите внимание: если вы используете CPython, вам нужно знать об GIL: http://wiki.python.org/moin/GlobalInterpreterLock – jsalonen

+1

@jsalonen: Вот почему ему нужен модуль многопроцессорности. – Gabe

+0

Очень хорошо. Просто говоря :) – jsalonen

ответ

3

См самый первый пример кода в multiprocessing docs:

from multiprocessing import Pool 

# you could define `func`, `a` here 

if __name__=="__main__": 
    p = Pool() # use all available CPU cores 
    b = p.map(func, a) 
+0

спасибо! Не представляю, что это так просто. –

1

Использование процесса пула. Вы можете увидеть полный образец в моем github: https://github.com/mariazverina/codejam/blob/master/src/main.py

from multiprocessing import Pool 

p = Pool(4) # set to number of cores 
b = p.map(func, a) 
+0

хорошая точка - мозг -> нарушение пальцев - обновленное объяснение выше –

+1

на Windows 'if __name __ ==" __ main __ "' является обязательным при использовании 'multiprocessing'. – jfs

+1

спасибо! Не представляю, что это так просто. –

Смежные вопросы