2011-10-04 17 views
20

Encontré un problema extraño al usar la biblioteca de multiprocesamiento de python.Multiproceso de Python: ¿cómo liberar memoria cuando se realiza un proceso?

Mi código se esquematiza a continuación: genero un proceso para cada tupla de "símbolo, fecha". Yo combino los resultados después.

Espero que cuando un proceso haya hecho la computación para una tupla de "símbolo, fecha", ¿debería liberar su memoria? aparentemente ese no es el caso. Veo docenas de procesos (aunque configuré el grupo de procesos para tener el tamaño 7) que están suspendidos¹ en la máquina. No consumen CPU, y no liberan la memoria.

¿Cómo dejo que un proceso libere su memoria, después de que ha hecho su cálculo?

Gracias!

¹ por "suspendido" Me refiero a su estado comando ps se muestra como "S +"

def do_one_symbol(symbol, all_date_strings): 
    pool = Pool(processes=7) 
    results = []; 
    for date in all_date_strings: 
     res = pool.apply_async(work, [symbol, date]) 
     results.append(res); 

    gg = mm = ss = 0; 
    for res in results: 
     g, m, s = res.get() 
     gg += g; 
     mm += m; 
     ss += s; 

Respuesta

22

¿trató de cerrar la piscina mediante el uso de pool.close y luego esperar a que el proceso para terminar por pool.join, porque si proceso padre sigue funcionando y no espera a que los procesos hijos se convertirán en zombies

+0

Esta fue la causa de mi guión causó reinicio de nodo debido a> 90% de la memoria de 4 Gb se consumieron :) Gracias! –

11

intente configurar el argumento maxtasksperchild en el grupo. Si no lo hace, el grupo reutiliza una y otra vez el proceso para que la memoria nunca se libere. Cuando se establece, el proceso se dejará morir y se creará uno nuevo en su lugar. Eso efectivamente limpiará la memoria.

supongo que hay de nuevo en 2.7: http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool

+0

He estado usando este enfoque, funciona bien. La pregunta es, ¿por qué no libera la memoria? ¿O tal vez no lo suficientemente rápido ...? – Elvin

Cuestiones relacionadas