← retour aux snippets

threading.Event: signaler entre threads

Coopérer entre threads avec un drapeau événementiel.

python threads #threading#event#sync

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.