2012-06-20 12 views
5

I tienen un trozo de código comoparalelización multiplicación de cálculo vectores-como en pitón

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

donde a y b son matrices de la misma longitud, se le da una (y grande), func es una función eso tiene muchas variables locales pero no usa ninguna variable global.

Me gustaría distribuir cálculos de func en varias CPU. Presumiblemente necesito usar el módulo de multiprocesamiento, pero no he encontrado ningún ejemplo relevante. ¿Podrías ayudar? Gracias.

+0

¿Qué intérprete de Python está utilizando? Tenga en cuenta que si usa CPython, debe tener en cuenta GIL: http://wiki.python.org/moin/GlobalInterpreterLock – jsalonen

+1

@jsalonen: Es por eso que necesita el módulo de multiprocesamiento. – Gabe

+0

Muy bien. Solo digo :) – jsalonen

Respuesta

3

Véase el primer ejemplo de código en el 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

¡gracias! No podría imaginar que sea tan fácil. –

1

Usar grupo de proceso. Puede ver una muestra completa en mi 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

buen punto - cerebro -> dedos mal funcionamiento - explicación actualizada anterior –

+1

en Windows 'if __name __ ==" __ main __ "' es obligatorio cuando se usa 'multiprocesamiento'. – jfs

+1

¡gracias! No podría imaginar que sea tan fácil. –