]> granicus.if.org Git - python/commitdiff
Tweak the threaded example in concurrent.futures
authorNick Coghlan <ncoghlan@gmail.com>
Tue, 16 Oct 2012 12:50:04 +0000 (22:50 +1000)
committerNick Coghlan <ncoghlan@gmail.com>
Tue, 16 Oct 2012 12:50:04 +0000 (22:50 +1000)
Doc/library/concurrent.futures.rst
Misc/NEWS

index 89085420e3970e0ae99395e0e86678b1c47d72c4..70b0fd10aee9bbb17bbd8625fda1fe62a152aac3 100644 (file)
@@ -136,20 +136,25 @@ ThreadPoolExecutor Example
            '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
index f779e02e00a2d884d087420c500ce74b5c471106..115e94dacd13cf0d70931b4e537f06fed7df27e4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -143,6 +143,9 @@ Build
 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.