| from __future__ import with_statement | |
| import math | |
| import time | |
| import sys | |
| from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor | |
| PRIMES = [ | |
| 112272535095293, | |
| 112582705942171, | |
| 112272535095293, | |
| 115280095190773, | |
| 115797848077099, | |
| 117450548693743, | |
| 993960000099397] | |
| 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 | |
| def sequential(): | |
| return list(map(is_prime, PRIMES)) | |
| def with_process_pool_executor(): | |
| with ProcessPoolExecutor(10) as executor: | |
| return list(executor.map(is_prime, PRIMES)) | |
| def with_thread_pool_executor(): | |
| with ThreadPoolExecutor(10) as executor: | |
| return list(executor.map(is_prime, PRIMES)) | |
| def main(): | |
| for name, fn in [('sequential', sequential), | |
| ('processes', with_process_pool_executor), | |
| ('threads', with_thread_pool_executor)]: | |
| sys.stdout.write('%s: ' % name.ljust(12)) | |
| start = time.time() | |
| if fn() != [True] * len(PRIMES): | |
| sys.stdout.write('failed\n') | |
| else: | |
| sys.stdout.write('%.2f seconds\n' % (time.time() - start)) | |
| if __name__ == '__main__': | |
| main() |