Python 3.2+concurrent.futuresфункция
concurrent.futures.wait()
пул задач
Ждёт набор Future до условия return_when (все, первый, первая ошибка) или таймаута и возвращает пару множеств (done, not_done).
Синтаксис
done, not_done = concurrent.futures.wait(fs, timeout=None, return_when=ALL_COMPLETED)
Возвращает множества, поэтому порядок задач теряется — нужен порядок, держите список future. Ошибки задач wait не поднимает: они ждут в result(). По таймауту TimeoutError нет, в отличие от as_completed, — просто непустой not_done, а незавершённые задачи сами не отменяются и продолжают работать.
Примеры
import time
from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED
with ThreadPoolExecutor() as ex:
fast = ex.submit(time.sleep, 0.01)
slow = ex.submit(time.sleep, 0.4)
done, not_done = wait([fast, slow], return_when=FIRST_COMPLETED)
print(fast in done, slow in not_done) # → True True
from concurrent.futures import ThreadPoolExecutor, wait
with ThreadPoolExecutor() as ex:
fs = [ex.submit(int, s) for s in ['1', 'x']]
done, _ = wait(fs) # ошибки здесь не всплывают
print(len(done)) # → 2
print(sum(f.exception() is not None for f in fs)) # → 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности