Модуль concurrent.futures предоставляет высокоуровневый интерфейс для запуска задач асинхронно, скрывая сложность прямого управления потоками или процессами.
ThreadPoolExecutor — выполняет задачи параллельно, используя пул потоков; лучше всего подходит для I/O-bound работы (сетевые запросы, операции с файлами)ProcessPoolExecutor — запускает задачи в отдельных процессах; лучше всего подходит для CPU-bound работы, так как обходит GIL (Global Interpreter Lock)Future — представляет будущий результат асинхронной операции; возвращается при отправке задачиЗадачи отправляются методами submit() или map():
with ThreadPoolExecutor(max_workers=4) as executor:
future = executor.submit(my_function, arg1, arg2)
result = future.result() # блокирует до завершения
submit() — планирует одну задачу и возвращает Futuremap() — применяет функцию к итерируемому объекту, возвращая результаты по порядкуfuture.result() — получает возвращаемое значение, блокируя выполнение, если результат ещё не готовfuture.result()ThreadPoolExecutor для I/O-bound задачProcessPoolExecutor для CPU-bound задач, требующих истинного параллелизмаProcessPoolExecutor предпочтительнее ThreadPoolExecutor для I/O-bound задач, таких как сетевые запросы, потому что обеспечивает лучшее использование ресурсов.
Новый — ещё не проверен сообществом
Вы