← Назад к вопросам
Что такое корутина в Asyncio?
2.0 Middle🔥 161 комментариев
#Асинхронность и многопоточность
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое корутина в Asyncio?
Корутина — это функция, которая может приостанавливать свое выполнение и возобновлять его позже, освобождая поток для выполнения других операций. В Python это реализуется с помощью ключевого слова async def и декоратора await.
Основные концепции
Корутина отличается от обычной функции тем, что может:
- Приостановить выполнение в определенных точках
- Передать контроль обратно событийному циклу (event loop)
- Возобновить выполнение, когда ресурс готов
Пример базовой корутины
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 операциями и микросервисами.