Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Python: asyncio, context

Как выполняется переключение контекста в asyncio?

Вопрос проверяет понимание кооперативной многозадачности и механизма await.

Короткий ответ

Переключение контекста в asyncio происходит в момент выполнения await. Корутина добровольно уступает управление event loop, который может запустить другую задачу. В отличие от потоков, переключение не происходит принудительно. Это называется кооперативной многозадачностью.

Длинный ответ

В asyncio нет принудительного переключения, как в потоках. Переключение происходит только в точках ожидания.

Как это работает

При выполнении:

await some_io()

происходит:

  1. текущая корутина приостанавливается

  2. управление возвращается event loop

  3. loop выбирает другую готовую задачу

  4. после завершения операции корутина возобновляется

Важная особенность

Если в коде нет await, переключения не будет.

Пример:

async def task():
    for i in range(10**8):
        pass   # блокировка, переключения нет

Планировщик задач

Event loop хранит:

  • очередь готовых задач

  • задачи, ожидающие I/O

  • таймеры

И последовательно их запускает.

Отличие от потоков

В потоках:

  • переключение делает ОС

  • возможно в любой момент

В asyncio:

  • переключение делает программа

  • только в точках await

Вывод

Переключение контекста в asyncio происходит кооперативно — только в момент await, когда корутина добровольно отдаёт управление event loop.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • Python

    Python

Ключевые слова

#asyncio

#context

Подпишись на Python Developer в телеграм