
Hallo,
eine Frage zum Threating unter Windows :
Wie kann man Thread-Zombies manuell killen ohne den Rechner neu zu booten.
Mein Problem: Ich habe mit Python 2.4 einige Threads unter Windows erzeugt ( insgesamt 27 ), die noch zu existieren scheinen, wenn ich das Skript erneut starte. Ich erhalte folgende Meldung :
Traceback (most recent call last):
File "C:\python\ips_mon\experiment4\winevt_multiserve
r.py", line 99, in ?
thread.start()
File "C:\Python24\lib\threading.py", line 410, in start
assert not self.__started, "thread already started"
AssertionError: thread already started
None
Mit dem Taskmanager kann man ja keine Threads sehen, aber ich kann zumindest sicher sagen, das ich alle Prozesse, von denen aus ich die Threads gestartet hatte, zwischendurch gekillt hatte. Leider ohne Erfolg.
Weiss jemand einen Rat ?
Vielen Dank im Voraus
Bernd
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

eine Frage zum Threating unter Windows :
Threating oder auch Multithreating ist eine sehr unschöne und potentiell gefährliche Angelegenheit - insbesondere wenn man es am falschen Ort macht: wer zB in einer Hell's Angels Kneipe multithreatet muss sich auf ein sehr blaues Auge gefasst machen...
Multithreading hingegen - das kann auch gefährlich werden, aber meistens nur in Form von Abstürzen.
Wie kann man Thread-Zombies manuell killen ohne den Rechner neu zu booten.
Mein Problem: Ich habe mit Python 2.4 einige Threads unter Windows erzeugt ( insgesamt 27 ), die noch zu existieren scheinen, wenn ich das Skript erneut starte. Ich erhalte folgende Meldung :
Traceback (most recent call last):
File "C:\python\ips_mon\experiment4\winevt_multiserve
r.py", line 99, in ?
thread.start()
File "C:\Python24\lib\threading.py", line 410, in start
assert not self.__started, "thread already started"
AssertionError: thread already started
None
Mit dem Taskmanager kann man ja keine Threads sehen, aber ich kann zumindest sicher sagen, das ich alle Prozesse, von denen aus ich die Threads gestartet hatte, zwischendurch gekillt hatte. Leider ohne Erfolg.
Weiss jemand einen Rat ?
Grundsätzlich gilt, das unter windows (auch Linux) threads zu einem Prozess gehören - und beendet werden, wenn der Prozess beendet wird. Deshalb kann das was du da beschreibst nicht wirklich das Problem sein. Selbst _wenn_ threads übrig blieben (was IMHO völlig unmöglich ist) - das beeinträchtigt keines falls die Möglichkeiten eines anderen Prozesses (und das wäre ein neu gestartets Programm) threads zu starten.
Ich denke mal das ist eher ein Artefakt deines Programmes - startest du das womöglich aus einer IDE? Ausserdem kann man mit Thread.setDaemon(True) verhindern, das ein laufender Thread weiterläuft wenn der main-Thread sich beendet. Das ist aber im Grunde nur eine dünne Logikschicht die den Prozess an der Beendigung hindert solange noch laufende Threads da sind - steht also _nicht_ im Widerspruch zu oben gesagtem.
Also alles in allem:
- setDaemon(Treu) aufrufen - Prozess extern starten, nicht aus einer IDE
Dann sollte das problem verschweinden.
MfG Diez
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Diez B. Roggisch wrote:
Grundsätzlich gilt, das unter windows (auch Linux) threads zu einem Prozess gehören - und beendet werden, wenn der Prozess beendet wird. Deshalb kann das was du da beschreibst nicht wirklich das Problem sein. Selbst _wenn_ threads übrig blieben (was IMHO völlig unmöglich ist) - das beeinträchtigt keines falls die Möglichkeiten eines anderen Prozesses (und das wäre ein neu gestartets Programm) threads zu starten.
Dabei möchte ich noch anfügen, daß debugger das Beenden von Threads meist verhindern und diese dann als Zombies "weiterlaufen" bis der Prozess beendet wird (oder der Debugger dies macht). Dient dazu den Rückgabewert auch nach Threadende noch im Debugger auslesen zu können. Als ich das nicht wusste habe ich Ewigkeiten gedacht ich hätte einen Fehler im C Modul und habe gesucht wie ein Irrer, doch war alles eigendlich in Ordnung ;)
Liebe Grüße Daniel
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Bernd Viehmann
-
Daniel Poelzleithner
-
Diez B. Roggisch