diff options
Diffstat (limited to 'module/network/Keepalive.py')
-rw-r--r-- | module/network/Keepalive.py | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/module/network/Keepalive.py b/module/network/Keepalive.py index 68abe087d..dbf4d94cb 100644 --- a/module/network/Keepalive.py +++ b/module/network/Keepalive.py @@ -9,9 +9,9 @@ # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., -# 59 Temple Place, Suite 330, +# License along with this library; if not, write to the +# Free Software Foundation, Inc., +# 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA # This file is part of urlgrabber, a high-level cross-protocol url-grabber @@ -24,7 +24,7 @@ >>> keepalive_handler = HTTPHandler() >>> opener = urllib2.build_opener(keepalive_handler) >>> urllib2.install_opener(opener) ->>> +>>> >>> fo = urllib2.urlopen('http://www.python.org') If a connection to a given host is requested, and all of the existing @@ -113,7 +113,7 @@ import sslfactory import sys if sys.version_info < (2, 4): HANDLE_ERRORS = 1 else: HANDLE_ERRORS = 0 - + class ConnectionManager: """ The connection manager must be able to: @@ -153,7 +153,7 @@ class ConnectionManager: def set_ready(self, connection, ready): try: self._readymap[connection] = ready except KeyError: pass - + def get_ready_conn(self, host): conn = None self._lock.acquire() @@ -177,7 +177,7 @@ class ConnectionManager: class KeepAliveHandler: def __init__(self): self._cm = ConnectionManager() - + #### Connection Management def open_connections(self): """return a list of connected hosts and the number of connections @@ -191,14 +191,14 @@ class KeepAliveHandler: for h in self._cm.get_all(host): self._cm.remove(h) h.close() - + def close_all(self): """close all open connections""" for host, conns in self._cm.get_all().items(): for h in conns: self._cm.remove(h) h.close() - + def _request_closed(self, request, host, connection): """tells us that this request is now closed and the the connection is ready for another request""" @@ -207,7 +207,7 @@ class KeepAliveHandler: def _remove_connection(self, host, connection, close=0): if close: connection.close() self._cm.remove(connection) - + #### Transaction Execution def do_open(self, req): host = req.get_host() @@ -238,7 +238,7 @@ class KeepAliveHandler: r = h.getresponse() except (socket.error, httplib.HTTPException), err: raise urllib2.URLError(err) - + # if not a persistent connection, don't try to reuse it if r.will_close: self._cm.remove(h) @@ -250,7 +250,7 @@ class KeepAliveHandler: r.code = r.status r.headers = r.msg r.msg = r.reason - + if r.status == 200 or not HANDLE_ERRORS: return r else: @@ -286,7 +286,7 @@ class KeepAliveHandler: self._cm.remove(h) h.close() raise - + if r is None or r.version == 9: # httplib falls back to assuming HTTP 0.9 if it gets a # bad header back. This is most likely to happen if @@ -342,7 +342,7 @@ class HTTPSHandler(KeepAliveHandler, urllib2.HTTPSHandler): if not ssl_factory: ssl_factory = sslfactory.get_factory() self._ssl_factory = ssl_factory - + def https_open(self, req): return self.do_open(req) @@ -367,7 +367,7 @@ class HTTPResponse(httplib.HTTPResponse): # although read() never adds to the buffer. # Both readline and readlines have been stolen with almost no # modification from socket.py - + def __init__(self, sock, debuglevel=0, strict=0, method=None): if method: # the httplib in python 2.3 uses the method arg @@ -396,7 +396,7 @@ class HTTPResponse(httplib.HTTPResponse): def close_connection(self): self._handler._remove_connection(self._host, self._connection, close=1) self.close() - + def info(self): return self.headers @@ -453,7 +453,7 @@ class HTTPConnection(httplib.HTTPConnection): class HTTPSConnection(httplib.HTTPSConnection): response_class = HTTPResponse - + ######################################################################### ##### TEST FUNCTIONS ######################################################################### @@ -487,7 +487,7 @@ def error_handler(url): def continuity(url): import md5 format = '%25s: %s' - + # first fetch the file with the normal http handler opener = urllib2.build_opener() urllib2.install_opener(opener) @@ -534,7 +534,7 @@ def comp(N, url): t2 = fetch(N, url) print ' TIME: %.3f s' % t2 print ' improvement factor: %.2f' % (t1/t2, ) - + def fetch(N, url, delay=0): import time lens = [] @@ -566,7 +566,7 @@ def test_timeout(url): fo = urllib2.urlopen(url) data1 = fo.read() fo.close() - + i = 20 print " waiting %i seconds for the server to close the connection" % i while i > 0: @@ -588,7 +588,7 @@ def test_timeout(url): DEBUG = dbbackup - + def test(url, N=10): print "checking error hander (do this on a non-200)" try: error_handler(url) @@ -604,7 +604,7 @@ def test(url, N=10): print print "performing dropped-connection check" test_timeout(url) - + if __name__ == '__main__': import time import sys @@ -614,4 +614,4 @@ if __name__ == '__main__': except: print "%s <integer> <url>" % sys.argv[0] else: - test(url, N) + test(url, N)
\ No newline at end of file |