Soquete Python aceita blocos - evita que o aplicativo seja encerrado
Eu escrevi uma classe python muito simples que espera por conexões em um soquete. A intenção é inserir essa classe em um aplicativo existente e enviar dados de forma assíncrona para clientes conectados.
O problema é que, ao aguardar um socket.accept (), não consigo finalizar meu aplicativo pressionando ctrl-c. Também não posso detectar quando minha aula sai do escopo e notificá-la para terminar.
Idealmente, o aplicativo abaixo deve ser encerrado após o vencimento do time.sleep (4). Como você pode ver abaixo, tentei usar select, mas isso também impede que o aplicativo responda a ctrl-c. Se eu pudesse detectar que a variável 'a' ficou fora do escopo no método main, eu poderia definir o sinalizador de desistência (e reduzir o tempo limite na seleção para torná-lo responsivo).
Alguma ideia?
obrigado
import sys
import socket
import threading
import time
import select
class Server( threading.Thread ):
def __init__( self, i_port ):
threading.Thread.__init__( self )
self.quitting = False
self.serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.serversocket.bind( (socket.gethostname(), i_port ) )
self.serversocket.listen(5)
self.start()
def run( self ):
# Wait for connection
while not self.quitting:
rr,rw,err = select.select( [self.serversocket],[],[], 20 )
if rr:
(clientsocket, address) = self.serversocket.accept()
clientsocket.close()
def main():
a = Server( 6543 )
time.sleep(4)
if __name__=='__main__':
main()