Estoy creando un programa que lee varios archivos y escribe un resumen de cada archivo en un archivo de salida. El tamaño del archivo de salida es bastante grande, por lo que mantenerlo en la memoria no es una buena idea. Estoy tratando de desarrollar una forma de multiprocesamiento para hacerlo. Hasta ahora, la forma más sencilla que he podido venir es:multiprocesamiento imap_unordered en python
pool = Pool(processes=4)
it = pool.imap_unordered(do, glob.iglob(aglob))
for summary in it:
writer.writerows(summary)
do es la función que resume el archivo. escritor es un objeto csv.writer
Pero la verdad es que todavía no entiendo multiprocessing.imap completamente. ¿Esto significa que 4 resúmenes se calculan en paralelo y que cuando leo uno de ellos, el 5 comienza a calcularse?
¿Hay una mejor manera de hacerlo?
Gracias.
"fragmentación reduce la sobrecarga de decapado y deshace los objetos resultantes". - Entonces, ¿por qué no hacer 'chunksize = len (iterable)/number of processes'? ¿Cuál es la compensación? –
@ AdamParkin cada elemento no puede ser procesado a la misma velocidad por un procesador, usted quiere tener una pila de elementos "listos para ser despachados" para llenar los procesadores en espera. – Zenon
hmm, supongo que debería tener algo como trabajos 'max (3 * nproc, len (it))', entonces. lo que significa 'chunksize = len (it)/max (3 * nproc, len (it))'. o hay una buena heurística? –