2012-01-16 3 views
5

Ho un programma Python che richiede circa 10 minuti per essere eseguito. Quindi io uso Pool da multiprocessing per accelerare le cose:Process persistenti Post Python Pool

from multiprocessing import Pool 
p = Pool(processes = 6) # I have an 8 thread processor 
results = p.map(function, argument_list) # distributes work over 6 processes! 

Si corre molto più veloce, proprio da questo. Dio benedica Python! E così ho pensato che sarebbe stato così.

Tuttavia, ho notato che ogni volta che faccio questo, i processi e il loro stato di dimensioni considerevoli rimangono, anche quando p è andato fuori campo; in modo efficace, ho creato una perdita di memoria. I processi vengono visualizzati nella mia applicazione Monitor di sistema come processi Python, che a questo punto non utilizzano CPU, ma una notevole quantità di memoria per mantenere il loro stato.

Pool ha funzioni close, terminate e join, e mi piacerebbe assumere uno di questi sarà uccidere i processi. Qualcuno sa qual è il modo migliore per dire al mio pool p che ho finito con esso?

Grazie mille per il vostro aiuto!

risposta

5

Dal Python docs, sembra che quello che dovete fare:

p.close() 
p.join() 

dopo la map() per indicare che i lavoratori dovrebbero sospendere e poi aspettare per loro di farlo.