私はテストしようとしているWebサービスからGETするためにurllib.request.urlopen()を使用しています。socket ResourceWarningはPython 3でurllibを使用しています
これはHTTPResponseオブジェクトを返します。次に、レスポンス本文を取得するために()を読み取ります。
しかし、私はいつもここでは、関連する機能ですsocket.py
から閉じられていないソケットについてのResourceWarningを参照してください。それは、プログラムの出力に表示される
from urllib.request import Request, urlopen
def get_from_webservice(url):
""" GET from the webservice """
req = Request(url, method="GET", headers=HEADERS)
with urlopen(req) as rsp:
body = rsp.read().decode('utf-8')
return json.loads(body)
ここで警告だ:
$ ./test/test_webservices.py
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/socket.py:359: ResourceWarning: unclosed <socket.socket object, fd=5, family=30, type=1, proto=6>
self._sock = None
.s
----------------------------------------------------------------------
Ran 2 tests in 0.010s
OK (skipped=1)
は、
ソケットをきれいに閉じるためにHTTPResponse(またはRequest?)にできることがあれば、 私は本当に好きですこのコードは私の単体テストのためのものです。私は のどこにでも警告を無視したくないが、特にそこにはない。
私はPython 3.3.1でそれを再現できません。あなたは最新のPythonバージョンでそれをテストできますか?ソケットを閉じる(http://bugs.python.org/issue12133)(ResourceWarning on timeout)と[Connection:close "' response header](http:// bugs)の2つのバグがありました。 python.org/issue12576)(ヘッダに応じて異なるコードパスがあることを示しています)。 – jfs