serve_forever
Pepe Aracil
pepe en diselpro.com
Jue Mayo 22 17:58:51 CEST 2008
Y si le pones un timeout al socket?
tcpserver_instance.socket.settimeout(5)
En teoria el método handle_request se
sale directamente si captura una excepcion
del tipo socket.error y creo que un
timeout de socket genera este tipo de
excepcion (no lo he probado)
Saludos.
Oswaldo Hernández escribió:
> 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
>
>
>
_______________________________________________
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