Ответ
В основе асинхронного программирования в Python с использованием библиотеки asyncio лежат следующие ключевые сущности:
-
Корутина (Coroutine) Функция, объявленная с помощью
async def. Является основным строительным блоком. Её выполнение можно приостановить и возобновить. Для получения результата корутины используется ключевое словоawait.import asyncio async def get_data(): print("Начало получения данных...") await asyncio.sleep(1) # Имитация I/O операции print("Данные получены") return {"data": 123} -
Задача (Task) Объект, который планирует и запускает выполнение корутины в цикле событий. Задачи позволяют корутинам выполняться параллельно (concurrently). Создаются с помощью
asyncio.create_task().# ...внутри async функции task1 = asyncio.create_task(get_data()) task2 = asyncio.create_task(get_data()) await task1 await task2 -
Цикл событий (Event Loop) Ядро
asyncio. Он управляет выполнением задач, отслеживает I/O операции и переключает контекст между корутинами, когда они ожидают завершения операции (await). -
Future Низкоуровневый объект, представляющий конечный результат асинхронной операции.
Taskявляется его подклассом. Обычно используется при работе с колбэками или при интеграции с низкоуровневым кодом. -
Асинхронные менеджеры контекста и итераторы Позволяют использовать конструкции
async withиasync forдля асинхронного управления ресурсами и итерации по асинхронным последовательностям.# Пример асинхронного итератора class AsyncCounter: def __init__(self, limit): self.limit = limit self.counter = 0 def __aiter__(self): return self async def __anext__(self): if self.counter < self.limit: await asyncio.sleep(0.1) self.counter += 1 return self.counter else: raise StopAsyncIteration async def main(): async for i in AsyncCounter(3): print(i) asyncio.run(main()) # Вывод: 1, 2, 3