Kommando wiederholen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Anonymous hat geschrieben:Jo, habs jetzt noch ein bisschen verändert und erweitert - klappt wunderbar!
Klappt aber nur mit einem 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 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

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"
Hier wird eine Klasse als Namensraum missbraucht. Warum sind die Funktionen nicht auf Modulebene?

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.
Antworten