Как не допустить зависание задачи в асинхронности
Python
Middle
Без компании
Как не допустить зависание задачи в асинхронности
Ответы
Используйте таймауты для асинхронных операций с помощью `asyncio.wait_for()`. Это предотвратит бесконечное ожидание:
```
import asyncio
async def fetch_data():
await asyncio.sleep(10) # Имитация долгой операции
async def main():
try:
await asyncio.wait_for(fetch_data(), timeout=5.0)
except asyncio.TimeoutError:
print("Операция превысила таймаут")
asyncio.run(main())
```
Другие важные практики:
- Используйте `asyncio.shield()` для критичных операций, которые нельзя прерывать
- Логируйте длительные задачи для отслеживания проблем
- Разделяйте CPU-bound задачи в отдельные потоки через `loop.run_in_executor()`
- Ограничивайте количество одновременных задач семафорами (`asyncio.Semaphore`)
Всегда предусматривайте обработку исключений и механизмы отмены задач через `task.cancel()`.