多线程请求Python
有没有一种方法可以逐渐打开多个新的到主机的持久连接?我知道您可以使用下面的代码更改持久连接的数量,但是如何建立连接多线程请求Python,python,multithreading,Python,Multithreading,有没有一种方法可以逐渐打开多个新的到主机的持久连接?我知道您可以使用下面的代码更改持久连接的数量,但是如何建立连接 s = requests.Session() adapter = requests.adapters.HTTPAdapter(pool_connections=5, pool_maxsize=28) s.mount('https//', adapter) 我正在尝试从API获取数据,速率限制如下: 新连接2/s 请求30/s 由于某些窗口限制,我使用多处理.pools.thr
s = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections=5, pool_maxsize=28)
s.mount('https//', adapter)
我正在尝试从API获取数据,速率限制如下:
- 新连接2/s
- 请求30/s
def My_Func(PARAMS):
...
req = requests.Request('GET', url, headers = headers, params = params)
pre = req.prepare()
resp = s.send(pre, stream = True, verify = False)
s = requests.Session()
pool = ThreadPool(10)
Data = pool.map(My_Func, PARAMS)
pool.close()
pool.join()
s.close()
这是代码:
def My_Func(PARAMS):
...
req = requests.Request('GET', url, headers = headers, params = params)
pre = req.prepare()
resp = s.send(pre, stream = True, verify = False)
s = requests.Session()
pool = ThreadPool(10)
Data = pool.map(My_Func, PARAMS)
pool.close()
pool.join()
s.close()
但是,生成的每个线程都会建立一个新连接(我认为这是因为其他连接尚未释放回池中)。这意味着对于线程池(10),我将得到一些响应429(超出连接限制)。来自:
请注意,只有在读取所有主体数据后,连接才会释放回池以供重用;确保将stream设置为False或读取响应对象的content属性
stream=True
不会从以下位置释放连接:
请注意,只有在读取所有主体数据后,连接才会释放回池以供重用;确保将stream设置为False或读取响应对象的content属性
stream=True
不会释放连接