Python 3.2+concurrent.futuresпонятие
concurrent.futures.Future
асинхронный результат
Объект, представляющий результат асинхронно выполняемой операции. Возвращается методом submit(). Позволяет проверить статус и получить результат.
Синтаксис
f = executor.submit(fn, *args)
f.result() # блокирует до готовности
f.done() # True если завершён
f.cancel() # отменить, если ещё не запущен
Исключение внутри задачи не всплывает само: оно хранится в Future и выбрасывается только тогда, когда вы вызовете result() (или exception()). Если результат никто не спросил — ошибка пропадает бесследно, это классическая причина "поток ничего не сделал и молчит". И не вызывайте result() сразу в цикле подачи задач: это блокирует и превращает пул в последовательное выполнение — собирайте futures в список, а потом обходите их через as_completed().
Примеры
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor() as ex:
f = ex.submit(sum, range(1000))
print(f.done()) # False или True
print(f.result()) # 499500 — блокирует
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности