Как правильно проектировать код с использованием асинхронных операций
Python
Senior
Без компании
Как правильно проектировать код с использованием асинхронных операций
Ответы
Асинхронный код в Python проектируется с использованием `async/await` и библиотеки `asyncio`. Основные принципы:
- Используйте `async def` для асинхронных функций
- Вместо блокирующих вызовов используйте асинхронные аналоги (например, `aiohttp` вместо `requests`)
- Избегайте смешивания синхронного и асинхронного кода
- Для конкурентного выполнения задач используйте `asyncio.gather()`
Пример:
```
import asyncio
import aiohttp
async def fetch_url(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
urls = ['http://example.com', 'http://example.org']
tasks = [fetch_url(url) for url in urls]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
```
Ключевые моменты:
- Не блокируйте event loop долгими синхронными операциями
- Используйте специализированные async-библиотеки
- Обрабатывайте ошибки через `try/except` внутри корутин
- Для CPU-bound задач используйте `asyncio.to_thread()` или отдельные процессы