Ho riscontrato un problema strano durante l'utilizzo della libreria di multiprocessing python.Multiprocessing di Python - Come rilasciare memoria quando un processo è terminato?
Il mio codice è schematizzato di seguito: creo un processo per ogni tupla "simbolo, data". Unisco i risultati in seguito.
Mi aspetto che quando un processo ha eseguito il calcolo per una tupla "simbolo, data", dovrebbe rilasciare la sua memoria? a quanto pare non è questo il caso. Vedo dozzine di processi (anche se ho impostato il pool di processi con la dimensione 7) che sono sospesi¹ nella macchina. Non consumano CPU e non rilasciano la memoria.
Come faccio a lasciare che un processo rilasci la sua memoria, dopo aver eseguito il calcolo?
Grazie!
¹ da intendo il suo stato in comando ps è indicata come "S +" "sospeso"
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;
questa è stata la causa principale del mio script causato nodo riavvio a causa di> 90% di memoria da 4 GB sono stati consumati :) Grazie! –