2017-02-26 99 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不釋放連接