2012-01-16 15 views
5

Tengo un programa Python que tarda unos 10 minutos en ejecutarse. Así que uso Pool de multiprocessing para acelerar las cosas:Procesos persistentes 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! 

Se ejecuta mucho más rápido, sólo de eso. Dios bendiga a Python! Y entonces pensé que sería eso.

Sin embargo, he notado que cada vez que hago esto, los procesos y su tamaño considerable permanecen, incluso cuando p ha salido del alcance; efectivamente, he creado una fuga de memoria. Los procesos aparecen en mi aplicación Monitor de sistema como procesos de Python, que no usan CPU en este punto, pero tienen una memoria considerable para mantener su estado.

Pool tiene las funciones close, terminate y join, y supongo que una de ellas matará los procesos. ¿Alguien sabe cuál es la mejor manera de decirle a mi grupo p que he terminado con él?

¡Muchas gracias por su ayuda!

Respuesta

5

Desde el Python docs, parece que lo que necesita hacer:

p.close() 
p.join() 

después de la map() para indicar que los trabajadores deben terminar y luego esperar a que lo hagan.