Вопросы об asyncio, корутинах и блокировках event loop
14 вопросов с ответами по теме «Asyncio и асинхронные задачи Python»
14 вопросов
Что проверяют на интервью
Как устроена подборка
Подборка о кооперативном выполнении корутин Python и условиях, при которых event loop продолжает обслуживать задачи. Вопросы охватывают запуск, ожидание и отмену, синхронизацию, работу с ресурсами и вынесение блокирующих операций из цикла событий.
До появления асинхронных возможностей в Python (до asyncio и async/await) выполнение задач, требующих параллелизма или одновременной работы с несколькими операциями ввода-вывода, осуществлялось преимущественно с помощью:
В asyncio корутины кооперативно делят поток event loop: задача выполняется до приостановки, после чего цикл может продвинуть другие готовые задачи или дождаться событий I/O.
await coroutine выполняет корутину в текущей задаче и ждёт её результата. createtask создаёт отдельную Task, позволяя ей продвигаться конкурентно с другими задачами event loop.
Асинхронный timeout ждёт завершения задачи до дедлайна, затем запрашивает отмену и корректно освобождает ресурсы. Это кооперативная отмена, а не принудительное завершение потока.
time.sleep и синхронный requests блокируют поток event loop. Таймер asyncio.waitfor не сможет вовремя обработать отмену, поэтому такой timeout не гарантирует остановку по настенным часам.
Блокирующая для event loop операция долго не возвращает ему управление. Это бывает не только при I/O: построение списка из миллиарда элементов также занимает поток и огромный объём памяти.
Плюсы и минусы синхронной и асинхронной парадигм в Python Синхронная: код проще читать, понимать и отлаживать Синхронная: операции ввода-вывода блокируют поток Асинхронная: выполнение не блокируется, поэтому подход…
Многопоточность, асинхронность и мультипроцессинг в Python Многопоточность: одновременная работа нескольких потоков в рамках одного процесса. Потоки используют общую память и требуют сравнительно небольших ресурсов.…
Как реализовать асинхронный контекстный менеджер в Python? Python, асинхронное программирование, контекстные менеджеры Реализовать методы aenter и aexit aenter — асинхронно выполняет вход в контекст (поддерживает…
Инструменты asyncio и области их применения asyncio — стандартная библиотека Python для асинхронного программирования Event loop — центральный механизм, который запускает задачи и управляет их выполнением (coroutines)…
Примитивы синхронизации в asyncio Lock: исключает одновременный доступ нескольких задач к одному ресурсу Event: служит для ожидания события и отправки сигнала о нем Condition: объединяет Lock с механизмом ожидания…