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

Как создать корутину?

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

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

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

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

Создание корутины в Python

Корутина — это функция, которая может приостанавливать и возобновлять своё выполнение, позволяя эффективно работать с асинхронными операциями. В Python есть несколько способов создания корутин.

Основной способ: async def

Первый и наиболее распространённый способ — использование ключевого слова async def:

async def my_coroutine():
    print("Начало корутины")
    await asyncio.sleep(1)
    print("Конец корутины")
    return "Результат"

Это создаёт объект корутины, который можно выполнить с помощью await или функций из модуля asyncio.

Запуск корутины

Есть несколько способов запустить корутину:

1. Использование asyncio.run() (самый простой способ для главной корутины):

import asyncio

async def my_coroutine():
    await asyncio.sleep(1)
    return "Готово"

# Запуск
result = asyncio.run(my_coroutine())
print(result)  # Готово

2. Использование await внутри другой корутины:

async def main():
    result = await my_coroutine()
    print(result)

asyncio.run(main())

3. Запуск параллельных корутин с asyncio.gather():

async def fetch_data(url):
    await asyncio.sleep(1)
    return f"Data from {url}"

async def main():
    results = await asyncio.gather(
        fetch_data("url1"),
        fetch_data("url2"),
        fetch_data("url3")
    )
    return results

result = asyncio.run(main())
print(result)

Практический пример: асинхронные HTTP запросы

import asyncio
import aiohttp

async def fetch_url(session, url):
    async with session.get(url) as response:
        return await response.json()

async def main():
    async with aiohttp.ClientSession() as session:
        urls = ["https://api.example.com/data1", "https://api.example.com/data2"]
        results = await asyncio.gather(
            *[fetch_url(session, url) for url in urls]
        )
    return results

results = asyncio.run(main())
print(results)

Важные особенности

  • Корутина не выполняется автоматически — нужно явно использовать await или asyncio.run()
  • await можно использовать только внутри async функции
  • Можно создавать иерархию корутин — вложенные async функции
  • asyncio.Task — способ обёртки корутины в задачу для отслеживания статуса
async def main():
    # Создание Task вместо прямого await
    task = asyncio.create_task(my_coroutine())
    result = await task
    return result

Это основные способы создания и запуска корутин в Python для работы с асинхронным кодом.

Как создать корутину? | PrepBro