Python 3.2+concurrent.futuresпонятие
concurrent.futures.Executor
пул задач
Абстрактный базовый класс пулов исполнителей: общий интерфейс submit, map и shutdown для пулов потоков, процессов и интерпретаторов.
Синтаксис
def run_all(pool: concurrent.futures.Executor): ... # submit, map, shutdown
Сам Executor ничего не исполняет — его submit поднимает NotImplementedError; создают наследника, а Executor пишут в аннотациях, чтобы пул можно было заменить. map отдаёт результаты в порядке входа, а не завершения, и первая ошибка задачи всплывает при переборе, обрывая его. shutdown(wait=False) не останавливает уже запущенные задачи: программа всё равно дождётся их перед выходом.
Примеры
from concurrent.futures import Executor, ThreadPoolExecutor
def squares(pool: Executor, data):
return list(pool.map(lambda x: x * x, data))
with ThreadPoolExecutor() as pool:
print(squares(pool, [3, 1, 2])) # → [9, 1, 4]
from concurrent.futures import ThreadPoolExecutor
def inv(x):
return 1 / x
with ThreadPoolExecutor() as pool:
try:
for r in pool.map(inv, [1, 0, 2]):
print(r)
except ZeroDivisionError:
print('ошибка во второй задаче') # → 1.0 / ошибка во второй задаче
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности