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;
Esta fue la causa de mi guión causó reinicio de nodo debido a> 90% de la memoria de 4 Gb se consumieron :) Gracias! –