में urllib का उपयोग करके चेतावनी मैं एक वेब सेवा से प्राप्त करने के लिए urllib.request.urlopen() का उपयोग कर रहा हूं जिसे मैं परीक्षण करने का प्रयास कर रहा हूं।सॉकेट संसाधन पाइथन 3
यह एक HTTPResponse ऑब्जेक्ट देता है, जिसे मैं प्रतिक्रिया शरीर प्राप्त करने के लिए() पढ़ता हूं।
$ ./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)
:
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)
यहाँ चेतावनी के रूप में यह कार्यक्रम के उत्पादन में दिखाई देता है:
लेकिन मैं हमेशा socket.py
यहाँ से एक खुली हुई सॉकेट के बारे में ResourceWarning देखना प्रासंगिक समारोह है
यदि कुछ भी है, तो मैं इसे अपने सॉकेट को साफ रूप से बंद करने के लिए HTTPResponse (या अनुरोध?) पर कर सकता हूं, मुझे वास्तव में पसंद आएगा जानना, क्योंकि यह कोड मेरे यूनिट परीक्षणों के लिए है; मुझे कहीं भी चेतावनियों को अनदेखा नहीं करना पसंद है, लेकिन विशेष रूप से वहां नहीं।
मैं इसे पायथन 3.3.1 पर पुन: उत्पन्न नहीं कर सकता। क्या आप इसे नवीनतम पायथन संस्करण पर परीक्षण कर सकते हैं; [सॉकेट बंद करना] से संबंधित कुछ बग थे (http://bugs.python.org/issue12133) (टाइमआउट पर संसाधन चेतावनी) और ['" कनेक्शन: बंद करें "प्रतिक्रिया शीर्षलेख] (http: // bugs। python.org/issue12576) (दिखाता है कि शीर्षलेख के आधार पर अलग-अलग कोड पथ हैं)। – jfs