Python Glossary English

Python 3.2+concurrent.futuresпонятие

concurrent.futures.ThreadPoolExecutor

пул потоков

Пул потоков из модуля concurrent.futures. Управляет созданием и переиспользованием потоков. Удобен для параллельных I/O-задач.

Синтаксис

with ThreadPoolExecutor(max_workers=N) as ex:
    future = ex.submit(fn, *args)
    results = ex.map(fn, iterable)

Потоки в CPython делят один GIL, поэтому пул ускоряет только ожидание — сеть, диск, время; на чистых вычислениях выигрыша не будет, там нужен ProcessPoolExecutor. Выход из with вызывает shutdown(wait=True) и блокирует программу до конца всех задач, а исключение внутри задачи не всплывает само — оно ждёт в Future и выстрелит только при обращении к result(). Если max_workers не задан, число потоков считается от числа ядер и сверху ограничено 32.

Примеры

from concurrent.futures import ThreadPoolExecutor
import time
urls = ['https://python.org', 'https://pypi.org']
def fetch(url):
    time.sleep(0.1)  # имитация ожидания сети: пока один поток ждёт, работают другие
    return len(url)
with ThreadPoolExecutor(max_workers=4) as ex:
    print(list(ex.map(fetch, urls)))  # → [18, 16] — порядок результатов как у входа

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности