[Python-checkins] cpython (merge 3.3 -> default): Merge concurrent.futures example changes from 3.3

nick.coghlan python-checkins at python.org
Tue Oct 16 14:51:22 CEST 2012


http://hg.python.org/cpython/rev/f2a739d6fc86
changeset:   79747:f2a739d6fc86
parent:      79745:f85c3f4d9b98
parent:      79746:a3f27289ec68
user:        Nick Coghlan <ncoghlan at gmail.com>
date:        Tue Oct 16 22:51:11 2012 +1000
summary:
  Merge concurrent.futures example changes from 3.3

files:
  Doc/library/concurrent.futures.rst |  25 ++++++++++-------
  Misc/NEWS                          |   3 ++
  2 files changed, 18 insertions(+), 10 deletions(-)


diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -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()
+       conn = urllib.request.urlopen(url, timeout=timeout)
+       return conn.readall()
 
+   # We can use a with statement to ensure threads are cleaned up promptly
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
-       future_to_url = dict((executor.submit(load_url, url, 60), url)
-                            for url in URLS)
-
-       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()))
+       # 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 --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -176,6 +176,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.
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list