urllib.request.urlopen()を使用して、テストしようとしているWebサービスからGETしています。
これはHTTPResponseオブジェクトを返し、それをread()して応答本文を取得します。
しかし、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?)に対して、ソケットをきれいに閉じるためにできることがあれば、このコードは単体テスト用であるため、本当に知りたいと思います。私はどこでも警告を無視するのは好きではありませんが、特にそこにはありません。