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

Это асинхронные функции, которые объявляются через async.

В момент ожидания, например, ответа от сервера, корутина приостанавливает свою работу, чтобы могла запуститься следующая. А когда ответ получен, продолжает свою работу.

Oct. 12, 2023, Источник

Сопрограмма (англ. coroutine) — компонент программы, обобщающий понятие подпрограммы, который дополнительно поддерживает множество входных точек (а не одну, как подпрограмма) и остановку, и продолжение выполнения с сохранением определённого положения. Расширенные возможности генераторов в Python (выражения yield и yield from, отправка значений в генераторы) используются для реализации сопрограмм. Сопрограммы полезны для реализации асинхронных неблокирующих операций и кооперативной многозадачности в одном потоке без использования функций обратного вызова (callback-функций) и написания асинхронного кода в синхронном стиле. Python 3.5 включает в себе поддержку сопрограмм на уровне языка. Для этого используются ключевые слова async и await.

Oct. 12, 2023, Источник

Корутина (Coroutine) - это специальный вид функции, который позволяет приостанавливать и возобновлять выполнение в произвольный момент времени. Корутины обеспечивают кооперативную многозадачность, что означает, что они позволяют явно управлять потоком выполнения в своем коде.

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

1. Асинхронность: Широко используются в асинхронном программировании, таком как асинхронные веб-серверы или сетевые клиенты. Они позволяют выполнять такие операции без блокирования основного потока выполнения.

2. yield/yield from: Для определения корутины используется ключевое слово `yield` или `yield from`, которое указывает места, где выполнение может быть приостановлено и возвращено обратно в вызывающий код.

3. Возобновление выполнения: Может быть возобновлена, чтобы продолжить выполнение с того же места, где она была приостановлена, и передать ей новые данные.

4. Сопрограммы: Их также называют сопрограммами (Subroutine), так как они представляют собой подпрограммы, которые могут быть вызваны и возобновлены.

Пример определения:

async def my_coroutine():
    print("Starting coroutine")
    await asyncio.sleep(1)  # Асинхронное ожидание в течение 1 секунды
    print("Coroutine completed")

# Вызов корутины
coro = my_coroutine()

Здесь `async def` обозначает определение асинхронной функции (корутины). Ключевое слово `await` используется для ожидания выполнения асинхронной операции, такой как `asyncio.sleep()`. Когда `await` используется внутри корутины, выполнение корутины приостанавливается до завершения операции, переданной в `await`, а затем возобновляется с последующей строки.

Feb. 17, 2024, easyoffer