# -*- coding: utf-8 -*- """Демо: Event — сигнал между потоками. Запуск из корня курса: python lab05_sync/examples/03_event_demo.py Потоки-«работники» ждут сигнала готовности (Event.set()), после чего начинают работу одновременно. Event — как стартовый пистолет. """ import os import sys import threading import time sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) def worker(idx, start_event, results): name = f"работник-{idx}" print(f" {name}: готов, жду сигнала") start_event.wait() # блокируется, пока set() не вызван t0 = time.perf_counter() time.sleep(0.1) # «работа» results[idx] = (name, time.perf_counter() - t0) print(f" {name}: закончил") def main(): start = threading.Event() results = {} threads = [threading.Thread(target=worker, args=(i, start, results)) for i in range(4)] for t in threads: t.start() time.sleep(0.5) # «подготовка данных» print("главный: сигнал! Event.set()") start.set() # все ждущие просыпаются РАЗОМ for t in threads: t.join() print(f"все закончили: {len(results)} из {len(threads)}") if __name__ == "__main__": main()