Hallo,
ich programmiere an einem kleinen Python Programm, das auch einen TCP
Server beinhaltet. Der Code des Servers liegt in einer Klasse und läuft
als Thread. Das Problem ist nun, dass beim Löschen der Klasse der
Dekonstruktor nicht (oder nicht korrekt) aufgerufen wird.
Codeausschnitt, der auf den Client wartet:
1 | while True:
|
2 | print ('waiting for clients...')
|
3 | clientsock, addr = TCPServer.SERVER.accept()
|
4 | print '...connected from:', addr
|
5 | thread.start_new_thread(__ClientHandler, (clientsock, addr))
|
Dekonstruktor der Klasse:
1 | def __del__(self):
|
2 | print ('Server wurde beendet')
|
3 | return
|
Wenn ich die Klasse in meinem Hauptprogramm mit dem Befehl
lösche, erwartete ich, dass in der Konsole "Server wurde beendet"
erscheint. Das ist aber nicht der Fall. Ich denke das liegt an dem
laufenden Thread. Daher will ich diesen manuell beenden.
Eine Abfrage eines Flags innerhalb der While-Schleife geht nicht, da der
Server bei der Zeile
1 | clientsock, addr = TCPServer.SERVER.accept()
|
so lange stehen bleibt, bis sich ein Client angemeldet hat.
Welche Möglichkeiten gibt es noch?