Python-multiprocessing - How, um Speicher freizugeben, wenn ein Prozess fertig ist?
Stieß ich auf ein seltsames problem während der Verwendung von python-multiprocessing-Bibliothek.
Mein code ist unten skizziert: ich spawn ein Prozess für jeden "- symbol, Datum" Tupel. Ich kombinieren Sie die Ergebnisse danach.
Ich erwarte, dass, wenn ein Prozess getan hat-computing für einen "- symbol, Datum" Tupel, sollte seine Speicher? anscheinend ist das nicht der Fall. Sehe ich Dutzende Prozesse (obwohl ich den Prozess-pool zu haben die Größe 7), die suspended1 in der Maschine. Sie verbrauchen keine CPU, und Sie nicht den Speicher freizugeben.
Wie kann ich einen Prozess release sein Gedächtnis, nachdem er getan hat, seine Berechnung?
Dank!
1 von "aufgehängt", ich meine, Ihrer Stellung in der ps-Befehl wird angezeigt als "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;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, zu schließen-pool mithilfe
pool.schließen
und warten dann auf Prozess beenden vonpool.join
, denn wenn der übergeordnete Prozess läuft weiter und wartet nicht auf Kind-Prozesse werden Sie zombiesVersuchen Sie, die maxtasksperchild argument auf den pool. Wenn nicht, dann wird der Prozess reusued immer und immer wieder durch die Lache, so die Speicher wird nie freigegeben. Wenn es gesetzt ist, wird der Prozess erlaubt, um zu sterben und eine neue erstellt, in ihm Platz. Das wird effektiv reinigen der Speicher.
Ich denke, es ist neu in 2.7: http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing.pool
Sollten Sie wohl nennen
close()
gefolgt vonwait()
auf IhrePool
Objekt.http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool