import concurrent.futures
import urllib.request
URLS =['http://www.foxnews.com/','http://www.cnn.com/','http://europe.wsj.com/','http://www.bbc.co.uk/','http://some-made-up-domain.com/']# Retrieve a single page and report the URL and contentsdefload_url(url, timeout):with urllib.request.urlopen(url, timeout=timeout)as conn:return conn.read()# We can use a with statement to ensure threads are cleaned up promptlywith concurrent.futures.ThreadPoolExecutor(max_workers=5)as executor:# Start the load operations and mark each future with its URL
future_to_url ={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]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(data)))