Threading, Referenz main-/run thread
Verfasst: Montag 30. Mai 2022, 16:50
Hallo Leute, ich versteh hier eine Kleinigkeit im Threading nicht.
Ich habe zu Testzwecken eine Hauptroutine, einen neuen thread und mein main thread. Dazu habe ich ein Event-objekt erstellt.
Wenn ich im main thread den Event stoppe, dann stoppt der main thread. Das klingt für mich noch plausibel, weil main thread ja auch ein thread ist.
Wenn ich aber den run thread stoppe und im main thread starte, dann startet der run thread. Das wiederum ist irritierend, weil ja nach obigem die Event-Referenz genommen wird aus dessen thread dieser verwendet wurde.
Meine Fragen lauten jetzt:
Wie kann ich von woanders den main thread starten und stoppen?
Ich habe zu Testzwecken eine Hauptroutine, einen neuen thread und mein main thread. Dazu habe ich ein Event-objekt erstellt.
Wenn ich im main thread den Event stoppe, dann stoppt der main thread. Das klingt für mich noch plausibel, weil main thread ja auch ein thread ist.
Wenn ich aber den run thread stoppe und im main thread starte, dann startet der run thread. Das wiederum ist irritierend, weil ja nach obigem die Event-Referenz genommen wird aus dessen thread dieser verwendet wurde.
Meine Fragen lauten jetzt:
Wie kann ich von woanders den main thread starten und stoppen?
Code: Alles auswählen
import threading
from time import sleep
class ThreadTest2(threading.Thread):
def __init__(self):
super().__init__()
self.MyEvent = threading.Event() # set() und wait()
# run() thread
def run(self):
print("run, Start; ")
sleep(1)
self.MyEvent.wait()
sleep(1)
# self.MyEvent.set()
print("run, Ende; ")
# main() thread
def on_event(self):
print("on_Event, Start; ")
# self.MyEvent.wait() # Wieso kann mit der run-Referenz der main() thread gestoppt werden?
sleep(3)
self.MyEvent.set() # ...aber das startet den run() thread!
print("on_Event, Ende; ")
# if __name__ == "main":
print("main START; ")
run_thread = ThreadTest2() # eigenen thread erstellen
run_thread.start() # hier startet run()
run_thread.on_event() # main_Thread()-Methode mit run thread-Referenz
print("main ENDE; ")