# -*- coding: utf-8 -*- """Демо: блокирующий сон убивает event loop. Запуск из корня курса: python lab06_asyncio/examples/02_blocking_mistake_demo.py time.sleep (в отличие от asyncio.sleep) НЕ уступает управление: все корутины встают в очередь. Классическая ошибка в async-коде. """ import asyncio import time async def worker_async(name: str, delay: float) -> str: await asyncio.sleep(delay) # уступает: другие работают return name async def worker_blocking(name: str, delay: float) -> str: time.sleep(delay) # НЕ уступает: парализует loop return name async def run_all(worker, delay: float) -> float: t0 = time.perf_counter() await asyncio.gather(*(worker(f"w{i}", delay) for i in range(5))) return time.perf_counter() - t0 async def main(): t = await run_all(worker_async, 0.2) print(f"asyncio.sleep: 5 задач за {t:.2f} c (идеал ≈ 0.2 c)") t = await run_all(worker_blocking, 0.2) print(f"time.sleep: 5 задач за {t:.2f} c (последовательные 1.0 c!)") print("\nВывод: в корутине можно вызывать только неблокирующие версии") print("операций. time.sleep -> asyncio.sleep, requests -> aiohttp и т.д.") if __name__ == "__main__": asyncio.run(main())