¿Asyncore o Threading?
Gabriel Genellina
gagsl-py2 en yahoo.com.ar
Mar Mayo 1 04:05:52 CEST 2007
En Mon, 30 Apr 2007 14:06:24 -0300, Pepe Aracil <pepe en diselpro.com>
escribió:
> Quiero implementar una clase para atender las peticiones
> del protocolo fastAGI que es como un fastCGI pero para
> el software PBX Asterisk.
>
> Resulta que el módulo Asynchat no me termina de cuadrar porque
> la implementación de esta aplicación en cuestión no encaja bien
> en el modelo de programación orientada a eventos.
>
> ¿Que ventajas si es que existen en cuanto a optimización tiene
> una lectura usando select (asyncore) como disparador en lugar de
> un thread con una lectura bloqueante?
Usar threads de por sí es problemático: consumen recursos, generan
problemas de sincronización, no todas las librerias estan pensadas para
ser usadas concurrentemente, no existen threads en todas las plataformas.
Por otro lado, asyncore "desarma" la logica de la aplicacion en multiples
eventos que pueden ser dificiles de entender aislados; los handlers de
cada evento deben ser cortos (en tiempo) sino se te estira el tiempo de
respuesta del sistema; pero no tiene problemas de concurrencia porque todo
se ejecuta en un unico thread, y asyncore esta disponible en casi
cualquier plataforma.
Si estas previendo que haya muchas peticiones simultaneas, puede ser mas
eficiente asyncore; pero si la carga es poca puede ser mas facil de
escribir usando threads.
Tambien existe la opcion combinada: usar asyncore para manejar las
conexiones de red, con handlers cortos, y cuando se recibio todo lo
necesario para procesar el pedido, disparar un thread separado que hace el
trabajo "de verdad" y avisa cuando termina de generar la respuesta. De esa
manera no se afecta tanto el tiempo de respuesta de las demas conexiones.
> Lo pregunto, porque si es mejor el select (asyncore), entonces
> implementaría
> un thread que se encargase de atender todos los sockets y que lanzase el
> loop
> principal del módulo asyncore.
El programa deberia tener un unico loop de eventos, usualmente en el
thread principal - especialmente si hay una interfase grafica aunque creo
que no es tu caso -.
--
Gabriel Genellina
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es