← Назад к вопросам
Как создать корутину?
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 для работы с асинхронным кодом.