Для блокирующего I/O используйте ограниченный пул потоков, для async I/O — ограниченное число корутин с очередью или семафором. gather собирает результаты, но сам не ограничивает конкурентность.
Как организовать параллельное выполнение задач с помощью multithreading и asyncio (пул воркеров, очередь задач, gather)?
Для блокирующего I/O используйте ограниченный пул потоков, для async I/O — ограниченное число корутин с очередью или семафором. gather собирает результаты, но сам не ограничивает конкурентность.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Для блокирующего I/O используйте ограниченный пул потоков, для async I/O — ограниченное число корутин с очередью или семафором. gather собирает результаты, но сам не ограничивает конкурентность.
Пул работников берёт задачи из ограниченной очереди и создаёт backpressure, если производитель быстрее. В asyncio блокирующую функцию можно вынести в поток, а CPU-нагрузку — оценить для процессов. Нужно определить поведение при ошибке, таймауте и отмене, а затем дождаться завершения или очистки работников. Создать миллион задач сразу и поставить семафор внутри — не то же самое, что ограничить память очереди.