Python socket принимает блоки - предотвращает выход из приложения

Я написал очень простой класс Python, который ожидает соединения в сокете. Намерение состоит в том, чтобы вставить этот класс в существующее приложение и асинхронно отправлять данные подключающимся клиентам.

Проблема в том, что при ожидании socket.accept () я не могу завершить свое приложение нажатием ctrl-c. Также я не могу определить, когда мой класс выходит из области видимости, и уведомить его об окончании.

В идеале приложение, приведенное ниже, должно завершиться после истечения времени time.sleep (4). Как вы можете видеть ниже, я попытался использовать select, но это также не позволяет приложению реагировать на ctrl-c. Если бы я мог обнаружить, что переменная 'a'; в основном методе я вышел из области видимости, я мог установить флаг выхода (и уменьшить время ожидания для выбора, чтобы сделать его отзывчивым).

Есть идеи?

Спасибо

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

Ответы на вопрос(2)

Ваш ответ на вопрос