Карточка Junior GIL, потоки и процессы обновлено
concurrent.futures
Вопрос
Что дают ThreadPoolExecutor и ProcessPoolExecutor?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Единый интерфейс пула: submit(fn, args) возвращает Future, map(fn, items) даёт результаты по порядку, ascompleted(futures) по мере готовности. Пул ограничивает число одновременных потоков или процессов.
Ответ
Единый интерфейс пула: submit(fn, *args) возвращает Future, map(fn, items) даёт результаты по порядку, as_completed(futures) по мере готовности. Пул ограничивает число одновременных потоков или процессов.
Разбор
Исключение в задаче сохраняется в Future и бросается при result(). В asyncio результат пула можно ждать через loop.run_in_executor.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «GIL, потоки и процессы»
- Выбор между потоками, процессами и asyncio
- Найти риск взаимной блокировки
- Время работы пула с ограничением параллелизма
- Смоделировать потерю обновления
- Потоки для CPU-bound задачи
- Lock против RLock
- fork в многопоточной программе
- Free-threaded CPython в 3.13 и 3.14