2012-12-18 9 views
5

Provare il semplicissimo esempio seguente causa il blocco del computer, quindi devo riavviare. Controllo task manager mostra centinaia di compiti "python.exe":Esempio di semplice giocattolo che utilizza il modulo di multiprocesso arresta il computer

import math 
from multiprocessing import Pool 

pool = Pool(processes=2) 
print pool.map(math.sqrt, [1,4,9,16]) 

sto usando una CPU dual core (i5 2467M) così ho pensato quanto sopra andrebbe bene.

Ho provato a impostare processes=1, che causa un problema leggermente diverso: l'attività non viene mai completata ma non causa il blocco del computer.

Qualche idea?

risposta

8

Ho avuto lo stesso problema la prima volta che ho giocato con multiprocessing. Racchiudere il codice di generazione del pool in un blocco if __name__ == '__main__'.

import math 
from multiprocessing import Pool 

if __name__ == '__main__': 
    pool = Pool(processes=2) 
    print pool.map(math.sqrt, [1,4,9,16]) 

Quello che sta succedendo è che quando viene creato il sottoprocesso, il modulo è essere deserializzato e rieseguire il codice generazione piscina in una ricorsione infinita. Con il blocco if, il codice di spawn verrà eseguito solo nell'istanza padre del modulo.

+0

Quale sistema operativo sei attivo? – mgilson

+0

Grazie. Risolto perfettamente (sto usando win 7). – iRoygbiv

+0

@mgilson Sono su Windows. –

Problemi correlati