← Назад к вопросам

Что такое корутина в Asyncio?

2.0 Middle🔥 161 комментариев
#Асинхронность и многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое корутина в Asyncio?

Корутина — это функция, которая может приостанавливать свое выполнение и возобновлять его позже, освобождая поток для выполнения других операций. В Python это реализуется с помощью ключевого слова async def и декоратора await.

Основные концепции

Корутина отличается от обычной функции тем, что может:

  1. Приостановить выполнение в определенных точках
  2. Передать контроль обратно событийному циклу (event loop)
  3. Возобновить выполнение, когда ресурс готов

Пример базовой корутины

import asyncio

async def hello():
    print("Start")
    await asyncio.sleep(1)  # Приостановка на 1 секунду
    print("End")

# Запуск корутины
asyncio.run(hello())

Несколько корутин одновременно

async def fetch_data(name, delay):
    print(f"Fetching {name}...")
    await asyncio.sleep(delay)
    print(f"Done {name}")
    return f"Data from {name}"

async def main():
    # Запуск трех корутин параллельно
    results = await asyncio.gather(
        fetch_data("User1", 1),
        fetch_data("User2", 2),
        fetch_data("User3", 1.5)
    )
    print(results)

asyncio.run(main())

Ключевые особенности

await — ключевое слово для ожидания результата корутины

result = await some_coroutine()

asyncio.create_task() — создание фоновой задачи

task = asyncio.create_task(fetch_data("API", 1))
await task

asyncio.gather() — выполнение нескольких задач параллельно

results = await asyncio.gather(task1, task2, task3)

Различие между обычной и асинхронной функцией

# Обычная функция
def sync_fetch():
    time.sleep(1)  # Блокирует весь поток
    return "data"

# Асинхронная функция (корутина)
async def async_fetch():
    await asyncio.sleep(1)  # Освобождает поток для других операций
    return "data"

Обработка исключений

async def risky_operation():
    await asyncio.sleep(1)
    raise ValueError("Something went wrong")

async def main():
    try:
        result = await risky_operation()
    except ValueError as e:
        print(f"Error: {e}")

asyncio.run(main())

Корутины — основа асинхронного программирования в Python и критически важны для создания высокопроизводительных приложений, особенно при работе с сетевыми запросами, I/O операциями и микросервисами.