# -*- coding: utf-8 -*- """Демо: asyncio — конкурентность на одном потоке. Запуск из корня курса: python lab06_asyncio/examples/01_async_basics_demo.py Три корутины «ждут сеть» одновременно: 0.6 c ожидания занимают 0.3 c. Всё на одном потоке — переключения только на await. """ import asyncio import time async def fetch(name: str, delay: float) -> str: print(f" {name}: старт") await asyncio.sleep(delay) # «ожидание сети» — уступает циклу print(f" {name}: готов") return name async def main(): print("--- gather: три корутины конкурентно ---") t0 = time.perf_counter() results = await asyncio.gather( fetch("A", 0.3), fetch("B", 0.2), fetch("C", 0.1), ) print(f"результаты: {results}") print(f"время: {time.perf_counter() - t0:.2f} c " f"(сумма ожиданий 0.6 c)\n") print("--- create_task: запустить сейчас, ждать позже ---") t0 = time.perf_counter() task = asyncio.create_task(fetch("фоновая", 0.3)) await asyncio.sleep(0.1) # пока она ждёт — занимаемся своим print(" главное: что-то делаю, пока фоновая ждёт") await task print(f"время: {time.perf_counter() - t0:.2f} c (задачи шли вместе)") if __name__ == "__main__": asyncio.run(main())