serve_forever

Oswaldo Hernández listas en soft-com.es
Jue Mayo 22 13:21:12 CEST 2008


Alejandro Bermudez Aragurz escribió:
> Oswaldo Hernández escribió:
>> >Luis Garcia Merino escribió:
>>>> ----- Original Message ----
>>>> From: Oswaldo Hernández <listas en soft-com.es>
>>>> To: Lista de discusión sobre python en castellano 
>>>> <python-es en aditel.org>
>>>> Sent: Thursday, May 22, 2008 10:38:33 AM
>>>> Subject: [Python-es] serve_forever
>>>>
>>>> Hola,
>>>>
>>>> En una aplicacion utilizo el modulo SocketServer.ThreadingTCPServer 
>>>> el cual me funciona muy bien.
>>>>
>>>> El problema con el que me encuentro es con el metodo serve_forever. 
>>>> Este metodo, como su nombre indica, maneja las conexiones entrantes 
>>>> de una forma muy bien explicada en su doc:
>>>>
>>>>          """Handle one request at a time until doomsday."""
>>>>
>>>> Bueno, el problema con el que me encuentro es ese, como detener el 
>>>> servidor desde otro thread. No encuantro ningúm metodo para ello en 
>>>> el modulo.
>>>>
>>>> He probado a cerrar el socket del servidor, pero no termina de 
>>>> funcionar bien puesto que hasta que el servidor necesite utilizarlo 
>>>> no salta la excepción, posiblemente sea debido a que el cierre se 
>>>> realiza desde otro thread.
>>>>
>>>> Finalmente he conseguido hacerlo de una forma un tanto chapucera, 
>>>> pero la pregunta es:
>>>>
>>>> ¿Alguien sabe como finalizar el servidor de una forma limpia?
>>>>
>>
>> >
>> >
>> >no lo he hecho, pero supongo que puedes programar el servidor para 
>> que al recibir determinada orden >a través del socket se termine la 
>> ejecución con server_close()... imagino que también podría >hacerse 
>> con kill y subprocess... aunque creo que la primera opción es más 
>> "limpia", pero no sé si >lo suficientemente limpia para ti  :)
>>
>>
>> ThreadingTCPServer crea automaticamente un nuevo thread con su 
>> manejador cuando recibe una conexión, este manejador puede recibir el 
>> mensaje de cierre y finalizrse a si mismo, pero continuo con el mismo 
>> problema de finalizar el thread del servidor.
>>
>> Sobre el kill, no ver forma de hacer kill a un thread.
>>
>> Saludos,
>>
>>
>>
> Yo lo solucione de una forma muy "guarra":
> 
>    Tienes una clase thread(o heredada de esta) donde se arranca el 
> servidor.
> 
>    Desde otra clase(o en el main del modulo, a omo lo quieras 
> organizar), se arranca el hilo anteriomente mencionado, y se queda en 
> bucle infinito esperando señal de apagado(la presencia de un archivo, 
> pulsacion de ctrl+c, etc). Cuando eso ocurre, matas tu propio proceso 
> con kill.

El problema que tengo es que la aplicación es un servicio de windows, y debo respetar las normas de 
arranque y parada del servicio, y por lo tanto, finalizar los procesos de la forma mas limpia posible.
Lo tengo solucionado de una forma no se si tan guarra como la tuya ;)

La pregunta va principalmente por si se me escapa algo, no se, que ThreadingTCPServer tenga algo 
para finalizar que no este documentado, se le pueda enviar algun tipo de señal para que se detenga ????.



-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
_______________________________________________
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