私はlocalhost上にサーバーをホストしています。私は数百のGET要求を非同期的に起動したいと考えています。このため私はgrequests
を使用しています。すべては正常に動作する表示されますが、私は繰り返し警告を得る:リクエスト+ grequests: "接続プールがいっぱいで、接続を破棄しています:"という警告が表示されますか?
WARNING:requests.packages.urllib3.connectionpool:接続プールが満杯になった、廃棄コネクション:date.jsontest.com
Aを検索でSession()
をrequests
に作成すると、プール全体の問題を回避する方法を示します。 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])