2012-06-20 12 views
5

Ho un pezzo di codice comeparallelizzare moltiplicazione della computazione vettori simili in pitone

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

dove a e b sono matrici della stessa lunghezza, a è dato (e grande), func è una funzione che ha un sacco di variabili locali ma non usa alcuna variabile globale.

Mi piacerebbe distribuire calcoli di funzioni su più CPU. Presumibilmente ho bisogno di usare il modulo multiprocessing, ma non ho trovato nessun esempio pertinente. Potresti aiutare? Grazie.

+0

Quale interprete Python stai usando? Nota che se usi CPython, devi essere a conoscenza di GIL: http://wiki.python.org/moin/GlobalInterpreterLock – jsalonen

+1

@jsalonen: Ecco perché ha bisogno del modulo di multiprocessing. – Gabe

+0

Molto bene. Detto solo :) – jsalonen

risposta

3

Vedi il primo esempio di codice nella 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

grazie! Non potrei immaginare che sia così facile. –

1

Usa pool di processi. Puoi vedere un campione completo nel mio 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

buon punto - cervello -> malfunzionamento delle dita - spiegazione aggiornata sopra –

+1

su Windows 'se __name __ ==" __ main __ "' è obbligatorio quando si utilizza 'multiprocessing'. – jfs

+1

grazie! Non potrei immaginare che sia così facile. –