我正在使用urllib.request.urlopen()从我试图测试的Web服务中获取GET。套接字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(或请求?),使其关闭它的插座干净, 我真的很喜欢要知道,因为这段代码是用于我的单元测试;我不喜欢 忽略任何地方的警告,但尤其是不存在。
我无法在Python 3.3.1上重现它。你可以在最新的Python版本上测试它吗? [关闭套接字](http://bugs.python.org/issue12133)(ResourceWarning on timeout)和['“Connection:close”[response header]](http:// bugs。 python.org/issue12576)(显示根据标题有不同的代码路径)。 – jfs 2013-05-23 20:46:03