Python: wie kann ich einen thread zu töten, selbst nach einem timeout?

Schreibe ich eine multi-threaded Python-app, die macht, viele TCP-verbindungen zum Server. Jede Verbindung erfolgt über einen separaten thread. Manchmal ist der Faden hängt für eine lange Zeit, die ich nicht will. Wie kann ich den thread zu töten, selbst nach einer bestimmten Zeit? Aus dem Haupt-thread, wie kann ich feststellen, dass der Kind-thread sich selbst umgebracht hat?

Wenn möglich würde ich mich über ein code-snippet zeigt, wie dies zu tun. Danke.

Update
Das system ist Ubuntu-9:10

  • Was meinst du mit hängt? Wenn es der Netzbetrieb, das hängt, nicht, Sie legen einen timeout für Sie?
  • Ja kann ich eine Netzwerk-Zeitüberschreitung, aber das verursacht einige Probleme. Siehe meine Frage von gestern. Diese Methode ohne timeout funktioniert gut für die meisten hosts. Ich würde nur gerne wissen, wie man einen thread zu töten, selbst.
  • Lesen Sie über threading.Timer "Ein thread, der ausgeführt wird, eine Funktion nach einer angegebenen Zeitspanne vergangen ist." docs.python.org/library/threading.html#timer-objects . E. g. könnten Sie machen einen timer, eine Funktion aufzurufen, schließt den thread?
  • Auch der thread-join-Methode aufgerufen werden kann, mit timeout: join([timeout]), ", Wenn der timeout-argument vorhanden ist und nicht Keine, es sollte eine floating-point-Zahl, die ein Zeitlimit für den Vorgang in Sekunden (oder Bruchteilen davon)", docs.python.org/library/threading.html#threading.Thread.join
  • sind Sie mit der Arbeit auf UNIX-ähnlichen system oder Windows?
  • Sorry, ich hätte sagen sollen. Es ist Ubuntu. Ich werde zu aktualisieren, ist die Frage.
  • Ich dachte über Ihre Frage ein wenig, am Ende denke ich sollten Sie besser finden eine andere Herangehensweise, eine solche zu vermeiden, die Tötung thread abrupt. Dies, weil die Tötung thread in Python ist nicht so einfach (siehe stackoverflow.com/questions/323972/...) und weil Sie würde setzen Sie Ihre Anwendung zu viele Fallstricke (Ressource erfasst, nicht nur einen zu nennen).

InformationsquelleAutor VacuumTube | 2011-01-25
Schreibe einen Kommentar