2010-05-12 14 views
6

Ich habe einen Thread, der ausgeführt wird, wenn eine Aktion auftritt. Angesichts der Logik des Programms kann der Thread möglicherweise nicht gestartet werden, während eine andere Instanz noch läuft. Wenn ich es ein zweites Mal anrufe, erhalte ich den Fehler "RuntimeError: Thread wurde bereits gestartet". Ich habe mit der Funktion Thread.is_alive() eine Überprüfung hinzugefügt, um festzustellen, ob sie tatsächlich aktiv ist, und sie ist tatsächlich tot.Python beendeten Thread kann nicht neu starten

Was mache ich falsch?

Ich kann mehr Details zur Verfügung stellen, wie sie benötigt werden.

Antwort

11

Threads können nicht neu gestartet werden. Sie müssen den Thread neu erstellen, um ihn erneut zu starten. Es ist nicht offiziell dokumentiert, so verwenden Sie es auf Ihr eigenes Risiko

2

können Sie versuchen,

thread._Thread__started = False 

Einstellung! :)

+0

Ich benutze bereits _Thread__stop() um es zu starten ... Hinzufügen von einem scheint nicht so schlimm, aber macht mein Programm wirklich hacky ... – bfrguci

6

Von der Python Dokumentation: start() startet die Aktivität des Threads. Dies muss höchstens einmal pro Thread-Objekt aufgerufen werden. Es veranlasst, dass die Methode run() des Objekts in einem separaten Steuerungsstrang aufgerufen wird.

Wenn Sie eine Klasse aus threading.Thread ableiten, können Sie am Ende der Run-Methode Thread.__init__(self) hinzufügen, und Sie können den Start erneut aufrufen und es wird automatisch neu initialisiert, wenn Sie fertig sind.