Что такое корутины в Python

Ответ

Корутина (coroutine) в Python — это специальная функция, выполнение которой можно приостановить и возобновить. Она является основой для асинхронного программирования с использованием asyncio.

Основные характеристики:

  • Объявление: Создается с помощью ключевых слов async def.
  • Приостановка: Использует await для приостановки своего выполнения и передачи управления обратно в цикл событий (event loop), пока ожидается результат другой корутины (например, asyncio.sleep() или сетевой запрос).
  • Возвращаемый объект: При вызове async def функция не выполняется немедленно, а возвращает объект корутины, который необходимо запланировать для выполнения в event loop.

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

Когда корутина встречает await, она говорит циклу событий: "Я жду завершения этой операции, а пока можешь запустить другую задачу". Это позволяет эффективно использовать время ожидания I/O операций, не блокируя весь поток.

Пример:

import asyncio

async def say_hello():
    print("Начало... ")
    # 1. Приостанавливаем say_hello и передаем управление event loop
    #    на 1 секунду. В это время могут выполняться другие задачи.
    await asyncio.sleep(1)
    # 2. Event loop возобновляет выполнение say_hello с этого места.
    print("...конец!")

# Создаем объект корутины
coro = say_hello()

# Запускаем корутину в цикле событий asyncio
asyncio.run(coro)