Что будет, если вызвать корутину без await?

корутина будет создана, но сразу не запустится вместо выполнения вернётся объект типа coroutine корутина сохранит состояние ожидания запуска без await нельзя получить результат её работы или обработать исключения для…

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

Что ответить на собеседовании

корутина будет создана, но сразу не запустится вместо выполнения вернётся объект типа coroutine корутина сохранит состояние ожидания запуска без await нельзя получить результат её работы или обработать исключения для запуска потребуется явно использовать asyncio.run() или loop.run_until_complete() логика асинхронной программы нарушится, а задачи могут привести к утечкам await необходим для асинхронного контроля выполнения и получения результата

Подробный разбор

Ответ с пояснениями

Что будет, если вызвать корутину без await?

  • корутина будет создана, но сразу не запустится
  • вместо выполнения вернётся объект типа coroutine
  • корутина сохранит состояние ожидания запуска
  • без await нельзя получить результат её работы или обработать исключения
  • для запуска потребуется явно использовать asyncio.run() или loop.run_until_complete()
  • логика асинхронной программы нарушится, а задачи могут привести к утечкам
  • await необходим для асинхронного контроля выполнения и получения результата

Подробный ответ

Основной ответ

Если при вызове корутины не указать ключевое слово await, она не выполнится до конца в текущем потоке. Вместо результата будет возвращён объект coroutine (корутин-объект), описывающий ещё не запущенную асинхронную задачу. Код внутри корутины начнёт работать только после явного ожидания результата с помощью await либо после передачи объекта в цикл событий для запуска.

Ключевые моменты

  • Ленивая природа корутин: в Python (начиная с версии 3.5+) корутина представляет собой специальный генератор, который запускается только при использовании await или передаче в event loop.
  • Код не выполняется сразу: простой вызов coroutine-функции без await создаёт объект, однако исполнение её тела откладывается.
  • Память и утечки: если не использовать объект coroutine, могут появиться warning'ы (RuntimeWarning), а в отдельных случаях — утечки ресурсов, когда корутина создаёт асинхронные контексты или должна быть завершена.
  • Удобство управления: await следует применять, чтобы явно задавать момент выполнения и контролировать обработку результата.

Практический контекст

В приложениях, использующих asyncio, забытый await при вызове асинхронной функции может остановить необходимые операции — например, подключение к БД или получение данных по сети. При этом проблема не всегда заметна сразу и позднее может проявиться в виде warning. Это распространённая ошибка начинающих разработчиков, которая показывает, насколько важно осознанно применять асинхронный синтаксис.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку