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