Keun Soo Yim | dc15686 | 2017-12-22 18:58:57 -0800 | [diff] [blame] | 1 | from __future__ import with_statement |
| 2 | import math |
| 3 | import time |
| 4 | import sys |
| 5 | |
| 6 | from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor |
| 7 | |
| 8 | PRIMES = [ |
| 9 | 112272535095293, |
| 10 | 112582705942171, |
| 11 | 112272535095293, |
| 12 | 115280095190773, |
| 13 | 115797848077099, |
| 14 | 117450548693743, |
| 15 | 993960000099397] |
| 16 | |
| 17 | def is_prime(n): |
| 18 | if n % 2 == 0: |
| 19 | return False |
| 20 | |
| 21 | sqrt_n = int(math.floor(math.sqrt(n))) |
| 22 | for i in range(3, sqrt_n + 1, 2): |
| 23 | if n % i == 0: |
| 24 | return False |
| 25 | return True |
| 26 | |
| 27 | def sequential(): |
| 28 | return list(map(is_prime, PRIMES)) |
| 29 | |
| 30 | def with_process_pool_executor(): |
| 31 | with ProcessPoolExecutor(10) as executor: |
| 32 | return list(executor.map(is_prime, PRIMES)) |
| 33 | |
| 34 | def with_thread_pool_executor(): |
| 35 | with ThreadPoolExecutor(10) as executor: |
| 36 | return list(executor.map(is_prime, PRIMES)) |
| 37 | |
| 38 | def main(): |
| 39 | for name, fn in [('sequential', sequential), |
| 40 | ('processes', with_process_pool_executor), |
| 41 | ('threads', with_thread_pool_executor)]: |
| 42 | sys.stdout.write('%s: ' % name.ljust(12)) |
| 43 | start = time.time() |
| 44 | if fn() != [True] * len(PRIMES): |
| 45 | sys.stdout.write('failed\n') |
| 46 | else: |
| 47 | sys.stdout.write('%.2f seconds\n' % (time.time() - start)) |
| 48 | |
| 49 | if __name__ == '__main__': |
| 50 | main() |