我正在使用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