Python — od podstaw do zaawansowanego · Concurrency II — wątki, procesy, GIL
threading — wątki i synchronizacja
Concurrency II — wątki, procesy, GIL
Wprowadzenie
Moduł threading jest wysokopoziomowym API do wątków systemowych. Daje klasę Thread, primitives synchronizacyjne (Lock, RLock, Semaphore, Event, Condition, Barrier) i thread-local storage (local()). Wątki dzielą pamięć — to siła (zero serialization), ale i ryzyko (race conditions, deadlocks).
W CPython z GIL threading jest narzędziem do I/O concurrency, nie parallel CPU. Typowe wzorce: producer-consumer z queue.Queue (która już ma wbudowane locki), pool wątków pobierający URL-e, file scanner równoległy. Wątki demoniczne (daemon=True) kończą się automatycznie gdy main wyjdzie — przydatne dla background tasks.
Synchronizacja: Lock to mutex (jeden wątek), RLock to mutex re-entrant (ten sam wątek może acquire wiele razy), Semaphore(n) to licznik (max N wątków), Event to flaga (set/clear/wait), Condition to wait/notify dla skomplikowanych scenariuszy, Barrier(n) synchronizuje N wątków w punkcie. Zawsze używaj with lock: zamiast manual acquire/release.