Чем asyncio.gather отличается от asyncio.wait?
gather собирает результаты нескольких awaitable в порядке аргументов. wait ждёт заданного условия завершения и возвращает множества done и pending для переданных задач.
Читать ответПодготовка к интервью
148 вопросов по asyncio с технических собеседований
Что проверяют на интервью
На странице собраны вопросы по asyncio — от проверки базовых принципов до практического применения и архитектурных решений. В подборке чаще встречаются темы: asyncio, async, python.
Каталог
gather собирает результаты нескольких awaitable в порядке аргументов. wait ждёт заданного условия завершения и возвращает множества done и pending для переданных задач.
Читать ответПрограмма не запускает корутину main, а ошибки БД маскируются под успешный импорт. Дополнительно нужны корректные транзакции, идемпотентность и валидация заказов.
Читать ответasyncio даёт выигрыш, когда много времени тратится на независимое ожидание I/O и используемые библиотеки не блокируют event loop. Последовательные ожидания тогда можно перекрыть.
Читать ответSemaphore ограничивает число одновременных запросов, а не RPS. Для жёсткого ограничения скорости нужен отдельный временной лимитер, который разрешает старт только в допустимый момент.
Читать ответGreenlet сохраняет стек выполнения и позволяет переключаться из обычного синхронного кода; asyncio использует явные await-точки нативных корутин. Gevent делает I/O кооперативным через свои API или patching.
Читать ответНужно атомарно проверить и уменьшить лимит в том месте, где он хранится: командой/скриптом Redis для общего состояния либо asyncio.Lock для одного процесса. Измерение ожидания полезно дополнительно.
Читать ответНа Linux стандартный selector-based asyncio loop обычно использует epoll через selectors для ожидания готовности файловых дескрипторов. Готовые события и таймеры возобновляют корутины.
Читать ответawait coro() исполняет корутину в текущей задаче и ждёт её; create_task() создаёт отдельную задачу для конкурентного выполнения. Занятый тяжёлым кодом event loop не может нормально переключать задачи.
Читать ответПри остановке сначала прекратите принимать новую работу, затем ограниченно дождитесь активных задач, отмените оставшиеся и дождитесь их cleanup. Простого вызова cancel недостаточно.
Читать ответДа: асинхронный сервер можно построить на неблокирующих сокетах и selectors или использовать другую event-loop-библиотеку. Asyncio — готовая реализация, а не единственный способ конкурентного I/O.
Читать ответБлокирующий синхронный код остановит event loop на время выполнения и задержит остальные корутины. Для блокирующего I/O его можно перенести в поток через asyncio.to_thread.
Читать ответAsyncio — библиотека Python для конкурентного выполнения корутин через async/await, особенно при ожидании сетевого ввода-вывода. Event loop переключается между задачами в точках приостановки.
Читать ответ