多线程请求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
由于某些窗口限制,我使用多处理.pools.threadpools进行多线程处理,而不是使用多处理.pools进行多线程处理

这是函数

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
不会释放连接