← retour aux snippets

concurrent.futures.wait: FIRST_COMPLETED/FIRST_EXCEPTION

Attendre selon des conditions et récupérer les sets done/pending.

python concurrency #wait

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.