我在 localhost 上托管一个服务器,我想异步触发数百个 GET 请求。为此,我正在使用grequests
. 一切似乎都很好,但我反复收到警告:
警告:requests.packages.urllib3.connectionpool:连接池已满,丢弃连接:date.jsontest.com
Session()
搜索显示了在创建requests
例如here时如何避免完整池问题。但是,有几件事:
- 即使我不采取任何措施来避免警告,我似乎始终能得到预期的结果。如果我确实使用了解决方法,任何超过数量的请求
pool_maxsize
都会发出警告。 - 如果请求数超过池大小,链接的解决方法仍会导致警告。我认为会有某种节流来防止在任何时候超过池大小
- 我似乎找不到禁用警告的方法。
requests.packages.urllib3.disable_warnings()
似乎什么也没做。
所以我的问题是:
- 这个警告实际上是什么意思?我的解释是,它只是放弃了触发请求,但似乎并非如此。
- 这个警告是否真的与
grequests
图书馆相关,特别是当我采取措施限制池大小时?我是否会在我的测试中引发意外的行为并侥幸获得预期的结果? - 有没有办法禁用它?
一些要测试的代码:
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])