objectif
Attendre selon des conditions et récupérer les sets done/pending.
code minimal
from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED
def slow(x): import time; time.sleep(0.001); return x
with ThreadPoolExecutor(max_workers=2) as ex:
fs = [ex.submit(slow, i) for i in range(3)]
done, pending = wait(fs, return_when=FIRST_COMPLETED)
print(len(done) >= 1 and len(pending) >= 1) # attendu: True
utilisation
from concurrent.futures import ThreadPoolExecutor, wait, FIRST_EXCEPTION
def oops(): raise RuntimeError("x")
with ThreadPoolExecutor(max_workers=1) as ex:
fs = [ex.submit(oops)]
d, p = wait(fs, return_when=FIRST_EXCEPTION)
f = next(iter(d))
try:
f.result()
except RuntimeError:
print(True)
variante(s) utile(s)
from concurrent.futures import wait
print(callable(wait))
notes
- wait renvoie deux ensembles: terminés et en attente.
- Combinez avec as_completed pour itérer au fil de l’eau.