> Как работает асинхронный код в Python: конкурентный или параллельный, в одном или нескольких потоках? (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: ИП Калюков Николай Сергеевич
Стек: Python
> Пример ответа
Асинхронный код в Python (asyncio) работает конкурентно (concurrency), а не параллельно (parallelism), и выполняется в одном потоке (single-threaded). Это ключевое отличие от многопоточности.
В основе лежит event loop (цикл событий), который управляет корутинами (coroutines) - специальными функциями, объявленными через async def. Когда корутина встречает await, она приостанавливается, передавая управление обратно в event loop, который может запустить другую корутину. Таким образом, задачи переключаются не по таймеру или завершению, а в точках ожидания (I/O, сетевое взаимодействие, таймеры).
Параллелизм (одновременное выполнение на нескольких ядрах CPU) в asyncio невозможен из-за GIL (Global Interpreter Lock) и однопоточной природы. Для настоящего параллелизма нужно использовать multiprocessing или concurrent.futures.ProcessPoolExecutor.
Пример:
PYTHONimport asyncioasync def task(name, delay):print(f"Старт {name}")await asyncio.sleep(delay) # точка переключенияprint(f"Финиш {name}")async def main():await asyncio.gather(task("A", 2), task("B", 1))asyncio.run(main())
Вывод: Старт A, Старт B, Финиш B, Финиш A - задачи выполняются конкурентно, но не параллельно.
> Похожие задачи по Python
Сколько ядер нужно для обработки миллиона пользователей за 4 часа, если расчет одного пользователя занимает 1 секунду?
Что выбрать для кэша рядом с базой данных: Redis, RabbitMQ или Kafka?
Какие механизмы инкапсуляции реализованы в Python?
Что означает двойное подчеркивание в начале имени метода или атрибута класса в Python?
> Похожие задачи по backend
Сколько ядер нужно для обработки миллиона пользователей за 4 часа, если расчет одного пользователя занимает 1 секунду?
Что выбрать для кэша рядом с базой данных: Redis, RabbitMQ или Kafka?
Какие механизмы инкапсуляции реализованы в Python?
Что означает двойное подчеркивание в начале имени метода или атрибута класса в Python?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью