objectif
Soumettre des tâches I/O et récupérer les résultats au fil de l’eau.
code minimal
from concurrent.futures import ThreadPoolExecutor, as_completed
def work(x): return x*x
with ThreadPoolExecutor(max_workers=4) as ex:
futures = [ex.submit(work, i) for i in range(5)]
res = [f.result() for f in as_completed(futures)]
print(sorted(res) == [0,1,4,9,16]) # attendu: True
utilisation
from concurrent.futures import ThreadPoolExecutor, TimeoutError
def slow(): import time; time.sleep(0.01); return 1
with ThreadPoolExecutor(max_workers=2) as ex:
fut = ex.submit(slow)
try:
print(fut.result(timeout=0.1) == 1)
except TimeoutError:
print(False)
variante(s) utile(s)
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=None) as ex:
out = list(ex.map(lambda x: x+1, [1,2,3]))
print(out == [2,3,4])
notes
- threads pour I/O liées; ne pas surprovisionner inutilement.
- Utilisez timeouts et cancel pour éviter des blocages.