Почему не стоит в event loop много задач
Python
Middle
Без компании
Почему не стоит в event loop много задач
Ответы
Добавление слишком большого количества задач в event loop может привести к нескольким проблемам:
- **Перегрузка памяти** – каждая задача потребляет память, и при большом их количестве возможны утечки или OOM-ошибки.
- **Блокировка event loop** – если задачи выполняют CPU-bound операции или блокирующие вызовы, event loop не сможет эффективно переключаться между задачами.
- **Увеличение latency** – задачи будут дольше ждать своей очереди на выполнение, что скажется на отзывчивости приложения.
Пример плохой практики:
```
import asyncio
async def cpu_bound_task():
# Долгая CPU-bound операция
sum(i * i for i in range(10**6))
async def main():
tasks = [cpu_bound_task() for _ in range(10_000)]
await asyncio.gather(*tasks) # Перегрузка event loop
asyncio.run(main())
```
Решение – ограничивать количество одновременных задач, использовать `asyncio.Semaphore` или выносить CPU-bound задачи в отдельные потоки через `loop.run_in_executor()`.