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

Alejandro Santos listas en alejolp.com
Lun Abr 7 10:25:31 ART 2014


2014-04-07 14:54 GMT+02:00 Claudio Freire <klaussfreire en gmail.com>:
>
> 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.

Suponiendo que es para el web crawler de w3af y haciendo esto, el
proceso se inicia desde una unica URL que recorre el grafo de links, y
nunca vas a paralelizar nada. El primer worker que toma la primer URL
hace todo el trabajo.

>
> 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.
>

Supongamos que el problema anterior lo resolves, de forma que los
nodos que estan a menos de X de distancia del nodo inicial los
paralelizas como un BFS, y los que estan a mas de X de distancia del
inicial los procesar como DFS, vas a volver al problema original: el
elevado uso de memoria, la diferencia que antes estaba en la Queue del
BFS y ahora tenes tu backlog en el stack del worker.

-- 
Alejandro Santos


More information about the pyar mailing list