> Как работает асинхронный код в 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.

Пример:

PYTHON
import asyncio
async 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 - задачи выполняются конкурентно, но не параллельно.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью