Можете объяснить, как реализована работа асинхронных функций с использованием ключевых слов async и await в Python?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
async и await в Python используются для написания асинхронного кода, который не блокирует выполнение на операциях ожидания, например при работе с сетью или файлами. async def объявляет корутину, а await приостанавливает её выполнение до завершения другой асинхронной операции. Это позволяет эффективно переключаться между задачами в одном потоке.
Определение:
async def создаёт асинхронную функцию, которая при вызове возвращает объект-корутину, а не сразу выполняет код. await можно использовать внутри async def, чтобы временно приостановить выполнение корутины и передать управление event loop, пока не завершится ожидаемая операция. Когда результат готов, выполнение продолжается с этого же места.
Пример использования:
Типичный случай — параллельная обработка нескольких сетевых запросов или ожидание ответов от внешнего API.
import asyncio
async def fetch_data():
await asyncio.sleep(1)
return "data"
async def main():
result = await fetch_data()
print(result)
asyncio.run(main())
Пояснение кода:
async def fetch_data()объявляет асинхронную функцию.await asyncio.sleep(1)не блокирует поток на 1 секунду, а отдаёт управление event loop.return "data"возвращает результат после завершения корутины.async def main()— точка входа для асинхронной логики.await fetch_data()ждёт завершенияfetch_data()и получает результат.asyncio.run(main())запускает event loop и выполняет корутинуmain().
Ключевые моменты:
async defсоздаёт корутину, которая выполняется асинхронно.awaitможно применять только внутриasync def.- Асинхронность в Python полезна для I/O-bound задач, а не для тяжёлых вычислений.
awaitне ускоряет код сам по себе, а позволяет не блокировать выполнение во время ожидания.- Для запуска корутин обычно используется event loop, например через
asyncio.run(). - Асинхронный код сложнее синхронного, но даёт хорошую масштабируемость при большом количестве одновременных ожиданий.