Tôi đang sử dụng urllib.request.urlopen() để GET từ một dịch vụ web mà tôi đang thử nghiệm.socket ResourceWarning sử dụng urllib trong Python 3
Điều này trả về một đối tượng HTTPResponse, sau đó tôi đọc() để lấy nội dung phản hồi.
Nhưng tôi luôn thấy một ResourceWarning về một ổ cắm không khép kín từ socket.py
Dưới đây là các chức năng có liên quan:
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)
Đây là cảnh báo vì nó xuất hiện trong đầu ra của chương trình:
$ ./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)
Nếu có bất kỳ điều gì tôi có thể thực hiện với HTTPResponse (hoặc Yêu cầu?) Để làm cho nó gần đúng ổ cắm của nó, Tôi thực sự muốn để biết, vì mã này là dành cho các bài kiểm tra đơn vị của tôi; Tôi không thích bỏ qua cảnh báo ở mọi nơi, nhưng đặc biệt là không có ở đó.
Tôi không thể tái tạo nó trên Python 3.3.1. Bạn có thể kiểm tra nó trên phiên bản Python mới nhất không; có một vài lỗi liên quan đến [đóng socket] (http://bugs.python.org/issue12133) (ResourceWarning trên thời gian chờ) và ['" Connection: close "' header response] (http: // bugs. python.org/issue12576) (cho thấy có các đường dẫn mã khác nhau tùy thuộc vào tiêu đề). – jfs