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

Alejandro Santos listas en alejolp.com
Lun Abr 7 04:44:00 ART 2014


2014-04-06 15:20 GMT+02:00 Andres Riancho <andres.riancho en gmail.com>:
> 2014-04-05 19:52 GMT-03:00 Alejandro Santos <listas en alejolp.com>:
>
>> al tener un límite en la Queue de espera, sí, podés tener un
>> deadlock. El caso patológico es cuando tenés un límite de 1 en la
>> Queue del Pool, que scrapea una web y vuelve a encolar en el Pool las
>> webs linkeadas.
>>
>> Estoy (casi) seguro que, en general, si tenes un límite de X tareas en
>> la Queue del Pool, cada tarea no puede re-encolar más de (X-1) nuevas
>> tareas al Pool, de lo contrario llegás a un deadlock (pero hoy me
>> duele mucho la cabeza y una segunda opinion no me vendría mal).
>
> Bien, entonces creo que para estar seguro de que no haya un dead-lock
> voy a armar un test case en el cual una pagina devuelva X * 2 (solo
> para estar seguro) links a crawlear. De esta manera veremos a ver si
> ese dead-lock se triggerea o no :)
>

Andres,

Fijate que el segundo párrafo está mal lo que dije. En cambio, esto si
se cumple:

2014-04-06 1:10 GMT+02:00 Alejandro Santos <listas en alejolp.com>:
>
> El caso que se rompe con un deadlock, en general, es cuando tenés que
> procesar un grafo con forma de arbol y llegás a procesar el nivel del
> árbol que tiene X nodos con al menos un hijo/adyacente cada uno.
>

¿Cómo estás usando el Pool? Leyendo la doc de Pool encontré esto[0]:

> Note that the methods of a pool should only ever be used by the
> process which created it.

Asi que lo que hice fue un pool propio. Este programa entra en
deadlock muy rapido, cada vez que lo ejecuto en mi máquina imprime en
promedio 46 líneas.

    https://gist.github.com/alejolp/10016215

[0] https://docs.python.org/2.7/library/multiprocessing.html#using-a-pool-of-workers

-- 
Alejandro Santos


More information about the pyar mailing list