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

Ezequiel Brizuela [aka EHB or qlixed] qlixed en gmail.com
Lun Abr 7 10:18:36 ART 2014


Para procesos cpu bound se complica mucho la gestión simplificada nada
mas...
Se puede intentar un combo de control dinamico + queue a disco. Pero
lamentablemente si hay interdependencia de procesos se puede dar un jodido
deadlock.
Otra opcion es hacer tu propio scheduler para gestionar los procesos, podes
hacer algo simple que se base en multitasking cooperativo... algo como un
padre que se lockea hasta q los hijos joineen....o algo asi. Los procesos
lockeados el SO los podria swappear si la memoria se va agotando.
Lo decis por la llamada al time.sleep(random.randint(1,9) / 10.0)?
Esta puesta solo para darle mas emocion! Si comentas la linea se sigue
colgando en deadlock.

Aumentando la cantidad maxima de elementos en la Queue o la cantidad
de Workers solo dilata el problema, tarda mas en colgarse pero
eventualmente llega al deadlock. Por ejemplo aca en una PC con 8
cores, 20000 tareas maximas y 16 workers tarda 5 segundos en colgarse,
sin la llamada al time.sleep.



2014-04-07 14:26 GMT+02:00 Ezequiel Brizuela [aka EHB or qlixed]
<qlixed en gmail.com>:
> Creo q estas tratando de hacer una especie de ratelimit sobre la creacion
de
> procesos. Para eso creo que tenes dos formas de resolverlo:
> 1) Rate control dinamico: vas lockeando 1 de cada n pedidos de nuevos
> procesos, haciendo n cada vez mas chico, a medida de q la queue crece.
> 2) rate control estatico: definis un valor, como tenes ahora, y con las
> peticiones q siguen podes hacer un lock como ahora, podes hacer descarte
si
> ttenes la logica de reintento en el proceso encolador, o podes hacer una
> queue en disco y que el proceso encolador jamas sepa que paso, sssolamente
> note el delay de ejecucion de proceso.
>
> My 2 cents.
>
> El abr 7, 2014 4:44 AM, "Alejandro Santos" <listas en alejolp.com> escribió:
>>
>> 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
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



--
Alejandro Santos
_______________________________________________
pyar mailing list pyar en python.org.ar
http://listas.python.org.ar/listinfo/pyar

PyAr - Python Argentina - Sitio web: http://www.python.org.ar/

La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140407/6697bddf/attachment-0001.html>


More information about the pyar mailing list