summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2013-11-01 10:23:23 -0700
committerGuido van Rossum <guido@python.org>2013-11-01 10:23:23 -0700
commit2205d8d2c68136450f64bd6af95536c89497e067 (patch)
tree193a17613f887ee3c459e0da86746dea93a6e79e /examples
parent7c932a847286c0eaa5812d01a12b32a9c824faea (diff)
downloadtrollius-2205d8d2c68136450f64bd6af95536c89497e067.tar.gz
Add pool-closing to fetch3 example.
Diffstat (limited to 'examples')
-rw-r--r--examples/fetch3.py31
1 files changed, 19 insertions, 12 deletions
diff --git a/examples/fetch3.py b/examples/fetch3.py
index fac880f..fa9ebb0 100644
--- a/examples/fetch3.py
+++ b/examples/fetch3.py
@@ -18,6 +18,10 @@ class ConnectionPool:
self.verbose = verbose
self.connections = {} # {(host, port, ssl): (reader, writer)}
+ def close(self):
+ for _, writer in self.connections.values():
+ writer.close()
+
@coroutine
def open_connection(self, host, port, ssl):
port = port or (443 if ssl else 80)
@@ -187,18 +191,21 @@ class Response:
@coroutine
def fetch(url, verbose=True, max_redirect=10):
pool = ConnectionPool(verbose)
- for _ in range(max_redirect):
- request = Request(url, verbose)
- yield from request.connect(pool)
- yield from request.send_request()
- response = yield from request.get_response()
- body = yield from response.read()
- next_url = response.get_redirect_url()
- if not next_url:
- break
- url = urllib.parse.urljoin(url, next_url)
- print('redirect to', url, file=sys.stderr)
- return body
+ try:
+ for _ in range(max_redirect):
+ request = Request(url, verbose)
+ yield from request.connect(pool)
+ yield from request.send_request()
+ response = yield from request.get_response()
+ body = yield from response.read()
+ next_url = response.get_redirect_url()
+ if not next_url:
+ break
+ url = urllib.parse.urljoin(url, next_url)
+ print('redirect to', url, file=sys.stderr)
+ return body
+ finally:
+ pool.close()
def main():