[pyar] Limitando size del input Queue de multiprocessing.Pool

Hernan Grecco hernan.grecco en gmail.com
Sab Abr 5 18:09:58 ART 2014


Hola Andres,

>     Durante una sesion de debugging/analisis de uso memoria me di
> cuenta que por varias razones estaba encolando una gran cantidad de
> tareas en un Pool (multiprocessing pool). Las mismas son eventualmente
> son ejecutadas, pero durante algunos periodos de tiempo la Queue [0]
> consumía una cantidad de memoria importante.
>
>     Entonces lo que se me ocurrió fue hacer un subclass de
> multiprocessing.Pool , y limitar el tamaño del Queue de entrada, de
> tal manera que los que quieran encolar nuevas tareas en el pool se
> bloqueen en caso de que el mismo ya tenga 250 tareas esperando a ser
> procesadas.

Ya podes especificar un tamaño maximo a Multiprocessing Queue [0]

Pero yo tengo otra pregunta. Pocas veces me encontré con un problema
asi y la mayor parte de las veces lo pude solucionar cambiando la
forma en la que organice las tareas. En general uso multiprocessing
para hacer calculo distribuido. En estos casos tengo alguna funcion
que calcula algo costoso o que analiza datos. En ambos casos el input
(que es lo que pongo en multiprocessing Queue) es pequeño. Cuando
tengo que pasar mucha data (por ejemplo una imagen o una tabla
grande), generalmente paso el nombre del archivo y el otro proceso se
encarga de leerlo y no hay problemas de memoria.

Como es tu aplicación?

saludos,

Hernán

[0] https://docs.python.org/2.7/library/multiprocessing.html#multiprocessing.Queue


More information about the pyar mailing list