Python — od podstaw do zaawansowanego · Concurrency II — wątki, procesy, GIL
concurrent.futures — abstrakcja nad wątkami i procesami
Concurrency II — wątki, procesy, GIL
Wprowadzenie
concurrent.futures (3.2+) to nowoczesne, idiomatyczne API nad threading i multiprocessing. Dwa wykonawcy: ThreadPoolExecutor (worker pool wątków) i ProcessPoolExecutor (worker pool procesów) z identycznym interfejsem. Wybór między nimi to wybór między I/O concurrency (threads) a CPU parallelism (processes).
Podstawowe API: submit(fn, *args, **kwargs) zwraca Future, map(fn, iterable, timeout=, chunksize=) jak wbudowany map ale parallel, shutdown(wait=True) zamyka pool. Best practice: zawsze używaj with ExecutorClass(...) as ex: — __exit__ woła shutdown(wait=True) automatycznie.Future reprezentuje pending result: result(timeout) blokuje aż gotowe (lub raisuje exception workera), exception() zwraca exception bez raise, done()/running() sprawdza stan, cancel() próbuje anulować (rzadko działa dla running tasks), add_done_callback(fn) rejestruje callback. Helpers: as_completed(futures) iteruje w kolejności zakończenia, wait(futures, return_when=) z FIRST_COMPLETED/ALL_COMPLETED/FIRST_EXCEPTION.