Ответ
Да, по своей сути, асинхронность в Python, реализованная через библиотеку asyncio
, является формой кооперативной многозадачности.
Это означает, что задачи (корутины) выполняются в одном потоке и добровольно уступают управление друг другу в определённых точках (оператор await
). Центральным элементом является цикл событий (event loop), который отслеживает готовые к выполнению задачи и передаёт им управление.
Это ключевое отличие от вытесняющей многозадачности (используемой в потоках/процессах), где операционная система сама принудительно переключает контекст между задачами.
Пример:
import asyncio
async def task(name, delay):
print(f"Задача {name}: начало")
# В этой точке задача 'засыпает' и добровольно
# отдает управление циклу событий
await asyncio.sleep(delay)
print(f"Задача {name}: завершение")
async def main():
# Задачи запускаются конкурентно, а не последовательно
await asyncio.gather(
task("A", 1),
task("B", 0.5)
)
asyncio.run(main())
Порядок вывода:
Задача A: начало
Задача B: начало
Задача B: завершение (т.к. sleep(0.5) закончился раньше)
Задача A: завершение