1

私は localhost でサーバーをホストしており、何百もの GET リクエストを非同期で起動したいと考えています。このために私は使用してgrequestsいます。すべて正常に動作しているように見えますが、繰り返し警告が表示されます。

警告:requests.packages.urllib3.connectionpool:接続プールがいっぱいです。接続を破棄しています:date.jsontest.com

Session()検索すると、ここrequestsなどでを作成するときに、プールがいっぱいになる問題を回避する方法が示されます。ただし、いくつかのことがあります。

  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])
4

1 に答える 1