Ho avuto lo stesso problema memoria, come Memory usage keep growing with Python's multiprocessing.pool quando non ho usato pool.close() e pool.join() quando si utilizza pool.map() con una funzione che calcola Levenshtein distanza. La funzione ha funzionato bene, ma non è stata raccolta in modo corretto su una macchina Win7 64 e l'utilizzo della memoria ha continuato a crescere senza controllo ogni volta che veniva richiamata la funzione fino a quando non veniva interrotto l'intero sistema operativo. Ecco il codice che ha risolto la perdita:
stringList = []
for possible_string in stringArray:
stringList.append((searchString,possible_string))
pool = Pool(5)
results = pool.map(myLevenshteinFunction, stringList)
pool.close()
pool.join()
Dopo aver chiuso e unito la piscina, la perdita di memoria è scomparsa.
fonte
2017-12-06 20:55:06
In genere chiamo 'pool.join()' poi 'pool.close()' una volta che ho avviato tutti i thread del pool, ma non ho provato a usare 'pool.imap_unordered()' come iterabile. – Bamcclur
qual è il punto di chiamata join o close? Non li ho chiamati e il mio codice sembra funzionare correttamente. Tuttavia, sono preoccupato che non chiamare quelli risulterebbe in processi di zombie o altre cose sottili. –