File: factorize

package info (click to toggle)
pyutilib 6.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,924 kB
  • sloc: python: 18,448; xml: 135; perl: 75; makefile: 50; sh: 32
file content (54 lines) | stat: -rwxr-xr-x 1,599 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/python3

from pyutilib.pyro import Client, Task
import random
import sys

NUMBER_OF_ITEMS = 40

numbers = {}

def processResult(item):
    print "Got result: %s (from %s)" % (item, item.processedBy)
    numbers[item.data] = item.result


def main():
    if len(sys.argv) == 2:
        host=sys.argv[1]
    else:
        host=None
    client = Client(host=host)
    print "\nThis program will calculate Prime Factorials of a bunch of random numbers."
    print "The more workers you will start (on different cpus/cores/machines),"
    print "the faster you will get the complete list of results!\n"
    print "placing work items into dispatcher queue."
    for i in range(NUMBER_OF_ITEMS):
        number=random.randint(3211, 5000)*random.randint(177,3000)*37
        numbers[number] = None
        item = Task(data=number)
        client.add_task(item)
    print "getting results from dispatcher queue."
    resultCount=0
    while resultCount<NUMBER_OF_ITEMS:
        result = client.get_result()
        if result is None:
            print "No results available yet. Work queue size:",client.num_tasks()
        else:
            processResult(result)
            resultCount+=1
    
    if client.num_results()>0:
        print "removing leftover results from the dispatcher"
        while True:
            result = client.get_result()
            if not result is None:
                processResult(result)

    print "\nComputed Prime Factorials follow:"
    for (number, factorials) in numbers.items():
        print number,"-->",factorials

if __name__=="__main__":
    main()