blob: 0da2b3e64c34bc4efaf7740c1988587ad03125a9 [file] [log] [blame]
Keun Soo Yimdc156862017-12-22 18:58:57 -08001from __future__ import with_statement
2import math
3import time
4import sys
5
6from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
7
8PRIMES = [
9 112272535095293,
10 112582705942171,
11 112272535095293,
12 115280095190773,
13 115797848077099,
14 117450548693743,
15 993960000099397]
16
17def 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
27def sequential():
28 return list(map(is_prime, PRIMES))
29
30def with_process_pool_executor():
31 with ProcessPoolExecutor(10) as executor:
32 return list(executor.map(is_prime, PRIMES))
33
34def with_thread_pool_executor():
35 with ThreadPoolExecutor(10) as executor:
36 return list(executor.map(is_prime, PRIMES))
37
38def 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
49if __name__ == '__main__':
50 main()