serve_forever
Oswaldo Hernández
listas en soft-com.es
Jue Mayo 22 15:42:28 CEST 2008
Pepe Aracil escribió:
> Hola
>
> Si te miras los fuentes del módulo Socketserver
> y en concreto de la clase BaseServer, veras esto:
>
> -- code --
> def serve_forever(self):
> """Handle one request at a time until doomsday."""
> while 1:
> self.handle_request()
> ------
>
> Solo tienes que crear una clase derivada de TCPServer y
> sobreescribir el método server_forever.
>
> ------ code --
> def serve_forever(self):
> """Handle one request at a time until exit_flag."""
> while not exit_flag:
> self.handle_request()
> ------
>
>
>
Asi es como lo tengo hecho, pero el problema es que no funciona hasta que hay una nueva peticion de
conexión.
Como apaño ademas de establecer el flag tengo que crear un socket en el otro proceso y hacer una
conexión al server, y entonces ya funciona lo del flag y termina.
Estos son los fragmentos del codigo real:
def serve_forever(self):
while 1:
self.Log.debug("handle_request, %s" % self.FinalizarProceso)
if self.FinalizarProceso:
break
self.handle_request()
self.Log.debug("serve_forever, finalizado")
En el proceso llamado para finalizar los threads:
Server.socket.close()
# esperar 2 segundos
time.sleep(2)
# abir conexion al socket para que pare
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(("localhost", 4069))
s.send('Cierrate hijo de p...!')
s.close()
except:
raise
--
*****************************************
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