Python-Socket-Akzeptanzblöcke - Verhindert, dass die App beendet wird

Ich habe eine sehr einfache Python-Klasse geschrieben, die auf Verbindungen an einem Socket wartet. Ziel ist es, diese Klasse in eine vorhandene App zu integrieren und asynchron Daten an verbindende Clients zu senden.

Das Problem ist, dass ich beim Warten auf ein socket.accept () meine Anwendung nicht durch Drücken von Strg-C beenden kann. Ich kann auch nicht erkennen, wann meine Klasse den Gültigkeitsbereich verlässt, und sie zum Beenden benachrichtigen.

Im Idealfall sollte die unten stehende Anwendung nach Ablauf der Zeitspanne (4) beendet werden. Wie Sie unten sehen können, habe ich versucht, select zu verwenden, dies verhindert jedoch auch, dass die App auf ctrl-c reagiert. Wenn ich feststellen könnte, dass die Variable 'a' in der Hauptmethode den Gültigkeitsbereich verlassen hat, könnte ich das Beendigungsflag setzen (und die Zeitüberschreitung bei Auswahl verringern, damit sie reagiert).

Irgendwelche Ideen?

Vielen Dank

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage