我在localhost上託管一臺服務器,我想異步發送數百個GET請求。爲此,我正在使用grequests
。一切似乎向做工精細,但我多次得到警告:requests + grequests:是否「連接池已滿,丟棄連接:」警告有關?
警告:requests.packages.urllib3.connectionpool:連接池已滿,丟棄連接:date.jsontest.com
一搜索顯示如何在requests
中創建Session()
時避免完整池問題here。然而,幾件事情:
1)即使我沒有采取任何措施來避免這種警告,我似乎始終得到預期的結果。如果我確實使用瞭解決方法,則對pool_maxsize
號碼的任何請求都會發出警告。
2)如果請求數量超過池大小,鏈接的解決方法仍將導致警告。我認爲在任何時候都會有某種限制,以防止池大小被超過。
3)我似乎無法找到一種方法來禁用警告。 requests.packages.urllib3.disable_warnings()
似乎沒有做任何事情。
所以我的問題是:
1)這個警告實際上是什麼意思?我的解釋是,它只是放棄瞭解僱的請求,但似乎並非如此。
2)這個警告是否與grequests
庫實際相關,特別是當我採取措施限制池大小時?我是否會邀請意外的行爲,並在我的測試中獲得預期的結果?
3)有沒有辦法禁用它?
import grequests
import requests
requests.packages.urllib3.disable_warnings() # Doesn't seem to work?
session = requests.Session()
# Hashing the below will cause 105 warnings instead of 5
adapter = requests.adapters.HTTPAdapter(pool_connections=100,
pool_maxsize=100)
session.mount('http://', adapter)
# Test query
query_list = ['http://date.jsontest.com/' for x in xrange(105)]
rs = [grequests.get(item, session=session) for item in query_list]
responses = grequests.map(rs)
print len([item.json() for item in responses])