Movatterモバイル変換


[0]ホーム

URL:


[Python-Dev] [PEP 3148] futures - execute computationsasynchronously

Brian Quinlanbrian at sweetapp.com
Fri Mar 5 07:03:02 CET 2010


Hi all,I recently submitted a daft PEP for a package designed to make it  easier to execute Python functions asynchronously using threads and  processes. It lets the user focus on their computational problem  without having to build explicit thread/process pools and work queues.The package has been discussed on stdlib-sig but now I'd like this  group's feedback.The PEP lives here:http://python.org/dev/peps/pep-3148/Here are two examples to whet your appetites:"""Determine if several numbers are prime."""import futuresimport mathPRIMES = [     112272535095293,     112582705942171,     112272535095293,     115280095190773,     115797848077099,     1099726899285419]def is_prime(n):     if n % 2 == 0:         return False     sqrt_n = int(math.floor(math.sqrt(n)))     for i in range(3, sqrt_n + 1, 2):         if n % i == 0:             return False     return True# Uses as many CPUs as your machine has.with futures.ProcessPoolExecutor() as executor:     for number, is_prime in zip(PRIMES, executor.map(is_prime,  PRIMES)):         print('%d is prime: %s' % (number, is_prime))"""Print out the size of the home pages of various new sites (and Fox  News)."""import futuresimport urllib.requestURLS = ['http://www.foxnews.com/',         'http://www.cnn.com/',         'http://europe.wsj.com/',         'http://www.bbc.co.uk/',         'http://some-made-up-domain.com/']def load_url(url, timeout):     return urllib.request.urlopen(url, timeout=timeout).read()with futures.ThreadPoolExecutor(max_workers=5) as executor:     # Create a future for each URL load.     future_to_url = dict((executor.submit(load_url, url, 60), url)                          for url in URLS)     # Iterate over the futures in the order that they complete.     for future in 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()))         else:             print('%r page is %d bytes' % (url, len(future.result())))Cheers,Brian


More information about the Python-Devmailing list

[8]ページ先頭

©2009-2025 Movatter.jp