Выбор ответа Middle asyncio обновлено
Ограничение числа одновременных запросов
Вопрос
Нужно скачать 10 000 URL, но не больше 20 запросов одновременно. Что правильно?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: asyncio.Semaphore(20) и async with sem: вокруг запроса. Семафор пропускает не больше 20 задач в критическую секцию, остальные ждут на async with. gather без ограничения откроет тысячи соединений разом, и сервер или клиент начнут отказывать.
Варианты ответа
asyncio.Semaphore(20)иasync with sem:вокруг запросаправильный ответasyncio.gatherна все 10 000 корутин без ограниченийasyncio.Lock()вокруг запроса в каждой из задачtime.sleep(0.05)между созданием задач, чтобы растянуть
Разбор
Семафор пропускает не больше 20 задач в критическую секцию, остальные ждут на async with. gather без ограничения откроет тысячи соединений разом, и сервер или клиент начнут отказывать. Lock ограничит до одного запроса, то есть до последовательного выполнения. time.sleep вообще блокирует цикл.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.