Встречается на собеседованиях • сегодня

Какую проблему получим при отправке тысячи асинхронных HTTP запросов в Python

При отправке тысячи асинхронных HTTP запросов можно столкнуться с несколькими проблемами:

  1. Ограничение открытых соединений - операционная система и сервер могут ограничивать количество одновременных соединений. Это может привести к ошибкам Too many open files или таймаутам.

  2. Перегрузка сервера - массовые запросы могут быть восприняты как DDoS-атака, что приведёт к бану IP.

  1. Потребление памяти - большое количество одновременных корутин может потреблять значительный объем памяти.

Пример безопасного подхода с ограничением количества одновременных запросов через семафор:

python
import asyncio
import aiohttp

async def fetch(url, session, sem):
    async with sem:
        async with session.get(url) as response:
            return await response.text()

async def main():
    sem = asyncio.Semaphore(100)  # Ограничиваем до 100 одновременных запросов
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(url, session, sem) for url in urls]
        await asyncio.gather(*tasks)

Рекомендуется также использовать:

  • Таймауты в aiohttp.ClientSession
  • Экспоненциальный бэкофф для повторных запросов
  • Пул соединений (TCPConnector)
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы