Ich habe gerade mit Threading in Python herumgespielt, schrieb dieses grundlegende IM-Ding [Code unten]
Ich habe bemerkt, dass wenn ich das Programm mit C-c beende, es nicht beendet wird, es hängt einfach für immer.
Ich vermute nur, dass es darauf wartet, dass jeder Thread beendet, was sie tun, aber da es eine Endlosschleife ist, die niemals passieren wird.
Ich denke, ich muss jeden Faden manuell töten oder die Schleife beenden, wenn das Killsignal kommt.
Wie würde ich das tun?
Ich sehe mehrere Ursachen für das Fehlverhalten in Ihrem Code.
Neben all diesen Dingen versuche ich hier eine Lösung. Dennoch kann viel verbessert werden. Sie sollten auch die Antwort von Mark Tolonen in Betracht ziehen, da die SocketServer-Klasse sicherlich dazu dient, einige Dinge im Umgang mit dieser Art von Dingen zu erleichtern. Aber du solltest auch weiterhin die Grundlagen lernen.
%Vor%Sehen Sie sich die Python-Bibliotheksquelle für SocketServer.py an, insbesondere die Implementierung von server_forever (), um zu sehen, wie ein Server einen Quit implementiert. Es verwendet select (), um den Server-Socket nach neuen Verbindungen abzufragen, und testet ein Beendigungs-Flag. Hier ist ein Hack auf Ihre Quelle, um SocketServer zu verwenden, und ich habe Shout () ein Beendigungs-Flag hinzugefügt. Es wird die Threads Shout und Listen für 5 Sekunden laufen lassen und dann stoppen.
%Vor%Tags und Links python multithreading