Verfasst: Donnerstag 12. Januar 2006, 23:38
Klappt aber nur mit einem Thread.Anonymous hat geschrieben:Jo, habs jetzt noch ein bisschen verändert und erweitert - klappt wunderbar!
Hier führst Du mit ``global`` ein `abbruch_event` ein, das für das gesamte Modul gilt und nicht nur für den einen Thread.Code: Alles auswählen
import threading import time class MyRegularThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) global abbruch_event abbruch_event = threading.Event() def run(self): sleep_time = 2 while not abbruch_event.isSet(): print "does anything" time.sleep(sleep_time) def close(self): abbruch_event.set()
Hier wird eine Klasse als Namensraum missbraucht. Warum sind die Funktionen nicht auf Modulebene?Code: Alles auswählen
class MyMainProgram: def begin_MyRegularThread(self): t = MyRegularThread() t.start() def close_MyRegularThread(self): t = MyRegularThread() t.close() def somethingElse(self): print "does something else"
In `begin_*` erzeugst Du ein `MyRegularThread` Objekt und startest den Thread. In `close_*` erzeugst Du ein neues `MyRegularThread` Objekt und rufst darauf die `close()` Methode auf. Was nur funktioniert weil `abbruch_event` auf Modulebene und nicht als Instanzvariable existiert.