1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
#!/usr/bin/env python3
import random
import sys
import bootstrap
import parallelize as p
import decorator_utils
import executors
import math_utils
@p.parallelize(method=p.Method.REMOTE)
def list_primes(n):
"""Calculates sum of all primes below given integer n"""
ret = []
for x in range(2, n):
ret.append(math_utils.is_prime(x))
return ret
@decorator_utils.timed
def driver() -> None:
results = {}
for _ in range(50):
n = random.randint(0, 100000)
results[n] = list_primes(n)
tot = 0
for _ in results[n]:
tot += _
print(tot)
@bootstrap.initialize
def main() -> None:
print(driver())
pexecutor = executors.DefaultExecutors().process_pool()
pexecutor.shutdown()
texecutor = executors.DefaultExecutors().thread_pool()
texecutor.shutdown()
rexecutor = executors.DefaultExecutors().remote_pool()
rexecutor.shutdown()
sys.exit(0)
if __name__ == '__main__':
main()
# print """Usage: python sum_primes.py [ncpus]
# [ncpus] - the number of workers to run in parallel,
# if omitted it will be set to the number of processors in the system
# """
# # tuple of all parallel python servers to connect with
# ppservers = ()
# #ppservers = ("10.0.0.1",)
# if len(sys.argv) > 1:
# ncpus = int(sys.argv[1])
# # Creates jobserver with ncpus workers
# job_server = pp.Server(ncpus, ppservers=ppservers)
# else:
# # Creates jobserver with automatically detected number of workers
# job_server = pp.Server(ppservers=ppservers)
# print "Starting pp with", job_server.get_ncpus(), "workers"
# # Submit a job of calulating sum_primes(100) for execution.
# # sum_primes - the function
# # (100,) - tuple with arguments for sum_primes
# # (isprime,) - tuple with functions on which function sum_primes depends
# # ("math",) - tuple with module names which must be imported before sum_primes execution
# # Execution starts as soon as one of the workers will become available
# job1 = job_server.submit(sum_primes, (100,), (isprime,), ("math",))
# # Retrieves the result calculated by job1
# # The value of job1() is the same as sum_primes(100)
# # If the job has not been finished yet, execution will wait here until result is available
# result = job1()
# print "Sum of primes below 100 is", result
# start_time = time.time()
# # The following submits 8 jobs and then retrieves the results
# inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)
# jobs = [(input, job_server.submit(sum_primes,(input,), (isprime,), ("math",))) for input in inputs]
# for input, job in jobs:
# print "Sum of primes below", input, "is", job()
# print "Time elapsed: ", time.time() - start_time, "s"
# job_server.print_stats()
# # Parallel Python Software: http://www.parallelpython.com
|