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

Claudio Freire klaussfreire en gmail.com
Lun Abr 7 09:54:33 ART 2014


2014-04-05 17:56 GMT-03:00 Andres Riancho <andres.riancho en gmail.com>:
>     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...


Por qué ponés cosas en el pool?

Yo creo que tenés una solución sencilla.

En tu subclase, hacé que cuando se llama a apply, si es desde un
worker (os.getpid() da el pid de un worker, o podés hacer
self.is_worker = True luego de forkear los workers), en vez de hacer
el apply, directamente ejecuta la función.

Esto va a convertir tu BFS en DFS, pero es la única manera de evitar
el deadlock y reducir el consumo de memorioa - el alto consumo de
memoria es inherente a BFS.

Si el grafo es infinito (no lo se), esto va a entrar en recursión
infinita, y va a explotar rápido al menos.


More information about the pyar mailing list