Python请求URLLib3连接池大小

Python请求URLLib3连接池大小,python,multithreading,python-requests,urllib,Python,Multithreading,Python Requests,Urllib,在我的应用程序中,我正在线程中发送几个request.post()请求。根据我必须发布的数据量,创建的线程数量可能有数百个 request对象的实际创建是使用requests oauthlib完成的,它在使用request对象时将身份验证数据插入该对象 我的问题是,当并行发送大量数据时,日志中会充斥以下消息,最终不会向日志发送更多的输入: 连接池已满。正在丢弃连接。 我的问题是,使用requests oauthlib,是否有办法确定连接池的大小(可能在post方法本身中),或者是否应该阻止连接池

在我的应用程序中,我正在线程中发送几个
request.post()
请求。根据我必须发布的数据量,创建的线程数量可能有数百个

request
对象的实际创建是使用
requests oauthlib
完成的,它在使用
request
对象时将身份验证数据插入该对象

我的问题是,当并行发送大量数据时,日志中会充斥以下消息,最终不会向日志发送更多的输入:

连接池已满。正在丢弃连接。

我的问题是,使用
requests oauthlib
,是否有办法确定连接池的大小(可能在
post
方法本身中),或者是否应该阻止连接池,以便在创建更多请求之前完成其他请求?我之所以要求这样做,是因为使用
requests oauthlib
,构建自定义
request
对象并要求
requests oauthlib
使用它是很困难的

我试过的一件事如下,但没有效果——我继续收到警告:

import requests
s = requests.Session()
a = requests.adapters.HTTPAdapter(pool_block=True)
s.mount('http://', a)
s.mount('https://', a)
更新-线程现在以受控方式创建。

with futures.ThreadPoolExecutor(max_workers=10) as executor:
    executor.submit(function, args)

阻止请求以使其中只有N个同时尝试使用连接池的最简单方法是一次只创建N个

最简单的方法是使用一个由N个线程组成的池为M个请求的队列提供服务,而不是为每个请求使用一个单独的线程。如果您使用的是Python3.2+,那么使用该库非常容易。事实上,它与第一个
ThreadPoolExecutor
示例几乎相同,只是您使用的是
requests
而不是
urllib
。如果您不使用3.2+,则名为的stdlib模块的一个后端口提供了与…2.6相同的功能,但请不要引用我的话(PyPI目前已关闭)

可能有一个更简单的解决方案:有一个第三方库,我从名称(同样,PyPI-down…)猜测,它以某种方式为您包装了它


您可能还想考虑在一个线程中使用一些类似的东西,使用<代码> gEngs< /Case> GrimeLead,但是,就代码而言,使用线程池不会有很大的不同。谢谢您的回答。我已经使用ThreadPoolExecutor实现了您所说的内容(我使用的是Python 2.7),并将其添加到了我的原始问题中。你能确认一下这就是你的想法吗?我不再收到超出连接池的警告,并且对发送请求的控制非常满意。谢谢你的帮助!