Estoy tratando de paralelizar una aplicación usando multiprocesamiento que toma en un archivo csv muy grande (64MB a 500MB), hace algo de trabajo línea por línea, y luego genera un pequeño archivo de tamaño fijo .¿Chunking de datos de un archivo grande para multiprocesamiento?
Actualmente hago un list(file_obj)
, que, desgraciadamente, se carga por completo en la memoria (creo) y luego romper esa lista hacia arriba en n partes, siendo n el número de procesos que desea ejecutar. Luego hago un pool.map()
en las listas rotas .
Esto parece tener un tiempo de ejecución muy, muy malo en comparación con una sola metodología enhebrada, just-open-the-file-and-iterate-over-it. ¿Puede alguien sugerir una mejor solución?
Además, necesito procesar las filas del archivo en grupos que conservan el valor de una cierta columna. Estos grupos de filas se pueden dividir, , pero ningún grupo debe contener más de un valor para esta columna.
mentí cuando dije que las líneas no están relacionados entre sí - en el csv, hay una columna que hay que dividir por (una columna nombre, y todas las filas con ese nombre no puede ser dividido). Sin embargo, creo que puedo adaptar esto al grupo en este criterio. ¡Gracias! No sabía nada sobre itertools, y ahora poco más que nada. – user1040625
Hubo un error en mi código original. Todas las llamadas a 'pool.apply_async' no son de bloqueo, por lo que todo el archivo se puso en cola al mismo tiempo. Esto hubiera resultado en ningún ahorro de memoria. Así que modifiqué un poco el bucle para poner 'num_chunks' a la vez. La llamada a 'pool.map' está bloqueando, lo que evitará que todo el archivo se ponga en cola a la vez. – unutbu
@HappyLeapSegundo usuario está intentando implementar sus métodos aquí http://stackoverflow.com/questions/31164731/python-chunking-csv-file-multiproccessing y está teniendo problemas. Quizás puedas ayudar? – m0meni