Estoy usando 'multiprocess.Pool.imap_unordered' de la siguiente manera
from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
do some additional processing on mapped_result
¿Necesito llamar pool.close
o pool.join
después del bucle for?
pool.join()
entoncespool.close()
una vez que he iniciado todos los subprocesos del grupo, pero no he intentado usarlospool.imap_unordered()
como iterable.Respuestas:
No, no lo hace, pero probablemente sea una buena idea si ya no va a usar la piscina.
Motivos para llamar
pool.close
opool.join
bien lo dijo Tim Peters en esta publicación SO :fuente
pool.close()
primero ypool.join()
segundo. Esto le permite agregar trabajo entrepool.close()
ypool.join()
que no necesita esperar a que el grupo termine de ejecutarse.pool.close()
primero, en realidad es obligatorio. De los documentos : uno debe llamarclose()
oterminate()
antes de usarjoin()
.Tuve el mismo problema de memoria ya que el uso de la memoria sigue creciendo con multiprocessing.pool de Python cuando no lo usaba
pool.close()
ypool.join()
cuando lo usabapool.map()
con una función que calculaba la distancia de Levenshtein. La función funcionaba bien, pero la basura no se recogía correctamente en una máquina Win7 64, y el uso de la memoria seguía creciendo fuera de control cada vez que se llamaba a la función hasta que desactivaba todo el sistema operativo. Aquí está el código que solucionó la fuga:stringList = [] for possible_string in stringArray: stringList.append((searchString,possible_string)) pool = Pool(5) results = pool.map(myLevenshteinFunction, stringList) pool.close() pool.join()
Después de cerrar y unirse a la piscina, la pérdida de memoria desapareció.
fuente
ERROR: Terminated with signal 15
antes de agregar el código de limpieza,pool.close();pool.join();
pero después de agregar ese código de limpieza no recibo los mensajes de la consola. así que sospecho que al menos en mi versión, python 2.7 de C7, que el grupo tal vez no se estaba limpiando exactamente de alguna manera.