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

Andres Riancho andres.riancho en gmail.com
Sab Abr 5 17:56:03 ART 2014


Estimados,

    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.

    Mi pregunta es... que es lo peor que puede pasar con esta
limitacion que agregue?

    En un escenario en el cual el limite fuese más bajo, digamos 5, se
me puede ocurrir que en mi codigo haya alguna serie de 6 funciones
anidadas, las cuales todas llaman al pool y esperan a que retorne un
resultado. Como estan anidadas, la ultima se va a bloquear, por lo que
voy a tener un dead-lock (todas las previas tambien se bloquean, nada
ocurre en el sistema). Pero realmente no creo que esto se pueda dar
con 250...

    Que les parece?

[0] http://hg.python.org/cpython/file/70274d53c1dd/Lib/multiprocessing/pool.py#l116

Saludos,
-- 
Andrés Riancho
Project Leader at w3af - http://w3af.org/
Web Application Attack and Audit Framework
Twitter: @w3af
GPG: 0x93C344F3


More information about the pyar mailing list