Что такое корутина в 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