(original) (raw)

changeset: 79746:a3f27289ec68 branch: 3.3 parent: 79744:24d52d3060e8 user: Nick Coghlan ncoghlan@gmail.com date: Tue Oct 16 22:50:04 2012 +1000 files: Doc/library/concurrent.futures.rst Misc/NEWS description: Tweak the threaded example in concurrent.futures diff -r 24d52d3060e8 -r a3f27289ec68 Doc/library/concurrent.futures.rst --- a/Doc/library/concurrent.futures.rst Tue Oct 16 08:13:12 2012 -0400 +++ b/Doc/library/concurrent.futures.rst Tue Oct 16 22:50:04 2012 +1000 @@ -136,20 +136,25 @@ 'http://www.bbc.co.uk/', 'http://some-made-up-domain.com/'\] + # Retrieve a single page and report the url and contents def load_url(url, timeout): - return urllib.request.urlopen(url, timeout=timeout).read() - - with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: - future_to_url = dict((executor.submit(load_url, url, 60), url) - for url in URLS) + conn = urllib.request.urlopen(url, timeout=timeout) + return conn.readall() - for future in concurrent.futures.as_completed(future_to_url): - url = future_to_url[future] - if future.exception() is not None: - print('%r generated an exception: %s' % (url, - future.exception())) + # We can use a with statement to ensure threads are cleaned up promptly + with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor: + # Start the load operations and mark each future with its URL + load_urls = [executor.submit(load_url, url, 60) for url in URLS] + for future, url in zip(load_urls, URLS): + future.url = url + for future in concurrent.futures.as_completed(load_urls): + url = future.url + try: + data = future.result() + except Exception as exc: + print('%r generated an exception: %s' % (url, exc)) else: - print('%r page is %d bytes' % (url, len(future.result()))) + print('%r page is %d bytes' % (url, len(data))) ProcessPoolExecutor diff -r 24d52d3060e8 -r a3f27289ec68 Misc/NEWS --- a/Misc/NEWS Tue Oct 16 08:13:12 2012 -0400 +++ b/Misc/NEWS Tue Oct 16 22:50:04 2012 +1000 @@ -143,6 +143,9 @@ Documentation ------------- +- Additional comments and some style changes in the concurrent.futures URL + retrieval example + - Issue #16115: Improve subprocess.Popen() documentation around args, shell, and executable arguments. /ncoghlan@gmail.com