objectif
Coopérer entre threads avec un drapeau événementiel.
code minimal
import threading, time
evt = threading.Event()
def worker():
evt.wait(timeout=1.0)
t = threading.Thread(target=worker); t.start()
evt.set(); t.join()
print(not t.is_alive()) # attendu: True
utilisation
import threading, time
evt = threading.Event()
out = []
def producer():
time.sleep(0.05); out.append(1); evt.set()
def consumer():
evt.wait(1.0); out.append(2)
tp = threading.Thread(target=producer); tc = threading.Thread(target=consumer)
tp.start(); tc.start(); tp.join(); tc.join()
print(out == [1,2] or out == [2,1])
variante(s) utile(s)
import threading
print(hasattr(threading, "Event"))
notes
- Utilisez Event pour bloquer jusqu’à un signal; réinitialisez via clear().
- Préférez Queue pour passer des données, Event pour un simple feu vert.