¿Puedo cambiar el tamaño del grupo de conexión para el módulo de “solicitudes” de Python?

(corrija: quizás me equivoque en lo que significa este error. ¿Esto indica que el grupo de conexiones de mi CLIENTE está lleno? ¿O que un grupo de conexiones en el SERVIDOR está lleno y este es el error que se le está dando a mi cliente?)

Estoy intentando hacer un gran número de solicitudes http mismo tiempo utilizando el módulo de threading y requests python. Estoy viendo este error en los registros:

 WARNING:requests.packages.urllib3.connectionpool:HttpConnectionPool is full, discarding connection: 

¿Qué puedo hacer para boost el tamaño del grupo de conexiones para las solicitudes?

Esto debería funcionar:

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

Nota: use esta solución solo si no puede controlar la construcción del conjunto de conexiones (como se describe en la respuesta de @Jahaja).

El problema es que urllib3 crea las agrupaciones bajo demanda. Llama al constructor de la clase urllib3.connectionpool.HTTPConnectionPool sin parámetros. Las clases se registran en urllib3 .poolmanager.pool_classes_by_scheme . El truco es reemplazar las clases con sus clases que tienen diferentes parámetros predeterminados:

 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 

Luego puedes llamar para establecer nuevos parámetros por defecto. Asegúrese de que se llame antes de realizar cualquier conexión.

 patch_http_connection_pool(maxsize=16) 

Si usas conexiones https puedes crear una función similar:

 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