Thread Pool

Pau Freixes pfreixes en milnou.net
Mar Dic 22 10:17:06 CET 2009


Por lo que puedo entender quizá el problema no sea de la gestion de threads,
si no de starvation + bloqueo, tal como explicas n funciones que luchan por
un mismo recurso bloqueado te estan dejando el Pool sin recursos provocando
que se produzca un efecto de bloqueo entre las funciones que estan
intentando utilizar el mismo recurso y el problema que otras funciones se
quedan sin la oportunidad de utilizar los threads.

Creo que la solución no pasa por modificar tu gestion de threads si no por
evitar esa posibilidad contextualizada en la función y el uso no concurrente
de ella.!!!

Una forma que se me ocurre a mi de hacer-lo es la siguiente


def foo(....)
   if recurso.trylock() is False:
      return SCHEDULE_AGAIN

   ....

Basicamente tendrias que volver a poner la función dentro de la cola de
tareas pendientes, si la cola es del tipo FIFO no se producirá starvation de
los otros procesos.

Venga saludos.


2009/12/21 Pepe Aracil <pepe en diselpro.com>

> Hola.
>
> Hace unos meses escribí esta implementación de un pool de tareas:
> http://code.activestate.com/recipes/576910/
>
> Es un pool que crea nuevas threads a medida que se van necesitando.
>
> El caso es que cuando llamo muchas veces seguidas a una misma función que
> no es
> reentrante (se protege con un lock), el pool se llena hasta "maxWorkers"
> impidiendo
> que otras funciones se ejecuten.
>
> La idea sería informar al pool de que una determinada función no es
> reentrante para que
> la ponga en una cola a parte  y se asegure de que solo se está ejecutando
> un thread
> a la vez con dicha función.
>
> ¿Alguna idea de como implementarlo de forma eficiente?
>
>
> Saludos.
>
>
> _______________________________________________
> Lista de correo Python-es http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



-- 
--pau
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es