Как asyncio позволяет допускать код с блокирующими командами CPU

Python Middle Без компании
Как asyncio позволяет допускать код с блокирующими командами CPU
Ответы
Asyncio работает на основе кооперативной многозадачности, где корутины добровольно отдают управление через `await`. Однако, если внутри корутины есть синхронный CPU-bound код (например, сложные вычисления), он блокирует event loop, так как не отдает управление. **Проблема:** ``` async def bad_example(): # Блокирует event loop result = sum(i*i for i in range(10**7)) ``` **Решение:** - **Вынос в отдельный поток/процесс** через `loop.run_in_executor()`: ``` async def good_example(): loop = asyncio.get_event_loop() result = await loop.run_in_executor(None, lambda: sum(i*i for i in range(10**7))) ``` - **Использование специализированных асинхронных библиотек** (например, `aiohttp` вместо `requests`) Ключевое правило: asyncio подходит для I/O-bound задач, а CPU-bound операции нужно выносить в executor или использовать multiprocessing.