multiproceso python. La piscina se atoró después de una larga ejecución.

Estoy desarrollando una herramienta que analiza grandes archivos. Para hacerlo más rápido, introduje el multiprocesamiento en él y todo parece funcionar bien. Para hacerlo, estoy usando multiprocesamiento. La creación de N subprocesos y ellos manejan diferentes partes del trabajo que creé anteriormente.

pool = Pool(processes=params.nthreads) for chunk in chunk_list: pool.apply_async(__parallel_quant, [filelist, chunk, outfilename]) pool.close() pool.join() 

Como puede ver, esta es una ejecución de grupo estándar, sin uso especial.

Últimamente encuentro un problema cuando estoy ejecutando una gran cantidad de datos. Las ejecuciones estándar toman alrededor de 2 horas con 16 subprocesos, pero tengo un caso especial que toma alrededor de 8 horas, debido a su gran cantidad de archivos y tamaño.

El problema es que últimamente encontré que cuando estoy ejecutando este caso, la ejecución funciona bien hasta el final, la mayoría de los niños terminan correctamente excepto uno que se atascó en

  

Como este niño no está terminando, el padre no se despierta y la ejecución se detiene.

Esta situación solo ocurre cuando los archivos de entrada son muy grandes, por lo que me preguntaba si hay algún tipo de tiempo de espera predeterminado que pueda causar este problema.

Estoy usando python 2.7 multiproceso 0.70a1

y mi máquina es un centos 7 (32 núcleos, 64 GB de RAM)

Gracias de antemano por tu ayuda

Jordi

De las pautas de progtwigción de multiprocesamiento:

Evitar el estado compartido

 As far as possible one should try to avoid shifting large amounts of data between processes. 

Si tiene que dividir el procesamiento de archivos a través de varios procesos, es mejor instruirlos sobre cómo recuperar los fragmentos de archivos en lugar de enviarlos ellos mismos.

Intente pasar el desplazamiento de fragmento y el tamaño del fragmento al proceso hijo. Puede recuperar el fragmento del archivo con open () y seek (). Notará una mejora en el rendimiento y también una reducción de la huella de memoria.