Python ThreadPoolExecutor: собрать результаты задач по порядку

Категория: Python · Язык: Python · Обновлено:

ThreadPoolExecutor выполняет независимые I/O-задачи в пуле потоков. Метод map возвращает результаты в исходном порядке входных элементов, даже если задачи завершаются в другом порядке.

Рабочий пример

Python
from concurrent.futures import ThreadPoolExecutor
def square130(value):
    return value * value
with ThreadPoolExecutor(max_workers=3) as pool130:
    result130 = list(pool130.map(square130, [1, 2, 3, 4]))
print(result130)  # [1, 4, 9, 16]

Используйте потоки для сетевого I/O и ожидания файлов. Для тяжёлых CPU вычислений в CPython сравните ProcessPoolExecutor; GIL ограничивает параллельное выполнение Python bytecode в потоках.

Частый вопрос

Как получить исключение конкретной задачи?

При submit сохраняйте Future и вызывайте result(); исключение возникнет при чтении результата. В map ошибка проявляется во время итерации по соответствующему элементу.