私は localhost でサーバーをホストしており、何百もの GET リクエストを非同期で起動したいと考えています。このために私は使用してgrequests
います。すべて正常に動作しているように見えますが、繰り返し警告が表示されます。
警告:requests.packages.urllib3.connectionpool:接続プールがいっぱいです。接続を破棄しています:date.jsontest.com
Session()
検索すると、ここrequests
などでを作成するときに、プールがいっぱいになる問題を回避する方法が示されます。ただし、いくつかのことがあります。
- 警告を回避するための措置を講じなくても、一貫して期待どおりの結果が得られるようです。回避策を使用した場合、 の数を超えるリクエストに対して
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])