• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from __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()
51