summaryrefslogtreecommitdiff
path: root/tests/parallelize_test.py
blob: 44f723c2673c80376a3b2bc8a0675bdc5e293581 (plain)
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