2017-02-26 109 views
1

有没有办法逐步打开多个新的持久连接到主机?我知道您可以使用下面的代码更改持久连接的数量,但您如何建立连接?多线程请求Python

s = requests.Session() 
adapter = requests.adapters.HTTPAdapter(pool_connections=5, pool_maxsize=28) 
s.mount('https//', adapter) 

我试图让数据从一个API具有以下速率限制:

  • 新连接2/s的
  • 请求30帧/秒

我多线程使用多处理器线程池线程,而不是多处理与多处理器线程到期对某些Windows约束。

这是函数

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() 

然而,每所产生的线程建立一个新的连接(我认为这是因为其他连接还没有被释放回池中)。这意味着对于ThreadPool(10),我会得到一些响应429(超出连接限制)。

回答

0

doc

注意连接仅释放回池中重用一旦所有的身体数据已被读取;请确保将流设置为False或读取Response对象的内容属性。

stream=True不释放连接