Thread Pool
Raúl Alexis Betancor Santana
rabs en dimension-virtual.com
Lun Dic 21 19:15:48 CET 2009
On Monday 21 December 2009 17:24:36 lasizoillo wrote:
> El día 21 de diciembre de 2009 15:32, Pepe Aracil <pepe en diselpro.com>
escribió:
> > 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?
>
> Creo que se me está escapando algo, porque se me ocurre como solución
> algo muy simple:
> - Creas un pool para las funciones reentrantes con el maxWorkers > 1
> - Creas otro pool para las funciones no reentrantes con el maxWorkers = 1
Si no he entendido mal el código ... lo que se te escapa es que la clase es un
Singleton y por lo tanto solo puede haber una instancia de la misma.
Pero vamos ... como solución, también prodrías hacer que internamente la clase
usase dos Queue's o dos Pool's y que si cuando añades el worker le pasas el
parámetro de "nonReentrant", pues que la mande al pool de las no reentrantes.
Saludos
--
Raúl Alexis Betancor Santana
Dimensión Virtual
------------ próxima parte ------------
_______________________________________________
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