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()

questionAnswers(2)

yourAnswerToTheQuestion