[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