Python: асинхронное программирование и pool_maxsize с HTTPAdapter - PullRequest
0 голосов
/ 18 марта 2019

Как правильно использовать HTTPAdapter с асинхронным программированием и вызовом метода?Все эти запросы отправляются в один и тот же домен.

Я делаю некоторое асинхронное программирование в Celery с использованием eventlet и проверяю нагрузку на одном из моих сайтов.У меня есть метод, который я вызываю, который делает запрос к URL.

def get_session (url): # получает сессию, возвращает исходные заголовки, proxies = header_proxy () # устанавливает все необходимые переменные в None, чтобы в случае ошибки # мы могли убедиться, что не прервали ответ= Нет status_code = Нет out_data = Нет содержимого = Нет

try:
    # we are going to use request-html to be able to parse the
    # data upon the initial request

    with HTMLSession() as session:
        # you can swap out the original request session here
        # session = requests.session()
        # passing the parameters to the session
        session.mount('https://', HTTPAdapter(max_retries=0, pool_connections=250, pool_maxsize=500))
        response = session.get(url, headers=headers, proxies=proxies)
        status_code = response.status_code
        try:
            # we are checking to see if we are getting a 403 error on all requests. If so,
            # we update the status code
            code = response.html.xpath('''//*[@id="accessDenied"]/p[1]/b/text()''')
            if code:
                status_code = str(code[0][:-1])
            else:
                pass
        except Exception as error:
            pass
            # print(error)
        # assign the content to content
        content = response.content
except Exception as error:
    print(error)
    pass

Если я опускаю параметры pool_connections и pool_maxsize и запускаю код, я получаю сообщение об ошибке, указывающее, что мне не хватаетоткрытые связи.Однако я не хочу без необходимости открывать большое количество соединений, если мне это не нужно.

1 Ответ

0 голосов
/ 19 марта 2019

основываясь на этом ... https://laike9m.com/blog/requests-secret-pool_connections-and-pool_maxsize,89/ Я собираюсь догадаться, что это относится к хосту, а не к асинхронной задаче. Поэтому я установил максимальное число на максимальное количество соединений, которые могут быть повторно использованы для каждого хоста. Если я попаду в домен несколько раз, соединение будет использовано повторно.

...