В каком случае Event Loop в asyncio может быть заблокирован
Python
Senior
VK
В каком случае Event Loop в asyncio может быть заблокирован
Ответы
Event Loop в asyncio может быть заблокирован, если внутри корутины выполняется синхронный (блокирующий) код, который не отдает управление обратно в цикл событий. Это приводит к "зависанию" всего приложения.
Основные причины:
- Долгие CPU-bound операции (например, сложные вычисления без `await`).
- Синхронные I/O операции (чтение файлов, сетевые запросы через `requests` вместо `aiohttp`).
- Использование `time.sleep()` вместо `asyncio.sleep()`.
Пример блокировки:
```
import asyncio
async def blocking_task():
# Синхронный sleep блокирует event loop
time.sleep(5) # Неправильно!
# await asyncio.sleep(5) # Правильно
async def main():
await asyncio.gather(
blocking_task(),
asyncio.sleep(1) # Эта задача не выполнится вовремя
)
```
Решение: использовать `await` для асинхронных операций или выносить блокирующий код в отдельные потоки через `loop.run_in_executor()`.