Могу ли я изменить размер пула соединений для модуля запросов «Python»?

(edit: Возможно, я ошибаюсь в том, что означает эта ошибка. Является ли это указанием на то, что пул соединений в моем CLIENT заполнен? или пул соединений в SERVER заполнен, и это ошибка, которую дает мой клиент?)

Я пытаюсь сделать большое количество http запросов одновременно, используя модуль pingon threading and requests . Я вижу эту ошибку в журналах:

  • Запрос на фляжку Python dataurl из url - для декодирования base64 image
  • Никакой поставляемой схемы и других ошибок при использовании request.get ()
  • Отправка запроса TLS 1.2 в Python 2.6
  • Рамочная программа Tornado (FacebookGraphMixin)
  • urllib2.urlopen не может получить изображение, но браузер может
  • Пагинация с использованием
  •  WARNING:requests.packages.urllib3.connectionpool:HttpConnectionPool is full, discarding connection: 

    Что я могу сделать, чтобы увеличить размер пула соединений для запросов?

  • Как безопасно запустить ненадежную часть кода?
  • ожидание ввода пользователя в отдельный поток
  • Никакой поставляемой схемы и других ошибок при использовании request.get ()
  • Как получить исходное содержимое ответа в запросах с Python?
  • Python subprocess.call () не работает при использовании pythonw.exe
  • Подпроцесс Python.Popen из потока
  • 2 Solutions collect form web for “Могу ли я изменить размер пула соединений для модуля запросов «Python»?”

    Это должно сделать трюк:

     import requests sess = requests.Session() adapter = requests.adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100) sess.mount('http://', adapter) resp = sess.get("/mypage") 

    Примечание. Используйте это решение только в том случае, если вы не можете контролировать построение пула соединений (как описано в ответе @ Jahaja).

    Проблема в том, что urllib3 создает пулы по требованию. Он вызывает конструктор класса urllib3.connectionpool.HTTPConnectionPool без параметров. Классы регистрируются в urllib3 .poolmanager.pool_classes_by_scheme . Трюк заключается в замене классов вашими классами, которые имеют разные параметры по умолчанию:

     def patch_http_connection_pool(**constructor_kwargs): """ This allows to override the default parameters of the HTTPConnectionPool constructor. For example, to increase the poolsize to fix problems with "HttpConnectionPool is full, discarding connection" call this function with maxsize=16 (or whatever size you want to give to the connection pool) """ from urllib3 import connectionpool, poolmanager class MyHTTPConnectionPool(connectionpool.HTTPConnectionPool): def __init__(self, *args,**kwargs): kwargs.update(constructor_kwargs) super(MyHTTPConnectionPool, self).__init__(*args,**kwargs) poolmanager.pool_classes_by_scheme['http'] = MyHTTPConnectionPool 

    Затем вы можете позвонить, чтобы установить новые параметры по умолчанию. Убедитесь, что это вызвано до того, как будет выполнено какое-либо соединение.

     patch_http_connection_pool(maxsize=16) 

    Если вы используете соединения https, вы можете создать аналогичную функцию:

     def patch_https_connection_pool(**constructor_kwargs): """ This allows to override the default parameters of the HTTPConnectionPool constructor. For example, to increase the poolsize to fix problems with "HttpSConnectionPool is full, discarding connection" call this function with maxsize=16 (or whatever size you want to give to the connection pool) """ from urllib3 import connectionpool, poolmanager class MyHTTPSConnectionPool(connectionpool.HTTPSConnectionPool): def __init__(self, *args,**kwargs): kwargs.update(constructor_kwargs) super(MyHTTPSConnectionPool, self).__init__(*args,**kwargs) poolmanager.pool_classes_by_scheme['https'] = MyHTTPSConnectionPool 
    Python - лучший язык программирования в мире.