LINUX.ORG.RU

Как быстро кидать много http запросов асинхронно?

 , , ,


1

3

Сейчас вот такой код используется:

from aiohttp import ClientSession

async def post(semaphore: asyncio.Semaphore, session: ClientSession, url: str, data: str):
    async with semaphore:
        try:
            async with session.post(url, data=data) as r:
                response_data = await r.read()

                class Response(object):
                    def __init__(self, status_code, text):
                        self.status_code = status_code
                        self.text = text

                return Response(r.status, response_data.decode('utf-8'))
        except Exception as e:
            print(e)
            return None


...................................
async with ClientSession() as session:
    semaphore = asyncio.Semaphore(256)
    coros = [post(semaphore, session, r[0], r[1]) for r in requests]
    requests = await asyncio.gather(*coros)

Но он показывает плохие результаты. Как можно ускорить и правильно ли я вообще делаю? Мне надо отправлять http запросы на сервер, но не более, чем 256 одновременно.

Отжешьбякакакая. Сегодня с утра копался, много всего перепробовал, полазал по нутрянкам и таки нашел ответ:

self.__session = ClientSession(connector=TCPConnector(limit=max_connections))

По-умолчанию, к одному эндпойнту создается максимум 10 подключений. Выставил сколько мне нужно и все взлетело.

panter_dsd ★★★★
() автор топика
8 декабря 2018 г.
Ответ на: комментарий от NetSurf

Результаты стали достаточными для решения поставленной задачи. :)

panter_dsd ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.