Python ThreadPoolExecutor: собрать результаты задач по порядку
ThreadPoolExecutor выполняет независимые I/O-задачи в пуле потоков. Метод map возвращает результаты в исходном порядке входных элементов, даже если задачи завершаются в другом порядке.
Рабочий пример
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 ошибка проявляется во время итерации по соответствующему элементу.