serve_forever

Alejandro Bermudez Aragurz abermudez en hispasec.com
Jue Mayo 22 12:16:39 CEST 2008


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.
_______________________________________________
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