Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from multiprocessing.managers import BaseManager
- import sys, math
- tasks_number = 3
- def read(fname):
- f = open(fname, "r")
- nr = int(f.readline())
- nc = int(f.readline())
- A = [[0] * nc for x in range(nr)]
- r = 0
- c = 0
- for i in range(0,nr*nc):
- A[r][c] = float(f.readline())
- c += 1
- if c == nc:
- c = 0
- r += 1
- return A
- def task_creator(A, X, tasks_number, in_queue):
- rows = len(A)
- x = math.ceil(rows/tasks_number)
- for i in range(tasks_number):
- b = (i+1)*x
- if(b > rows):
- b = rows
- in_queue.put([A[i*x: b], X, [i*x, b]])
- class QueueManager(BaseManager):
- pass
- fnameA = sys.argv[1] if len(sys.argv) > 1 else "A.dat"
- fnameX = sys.argv[2] if len(sys.argv) > 2 else "X.dat"
- ip = sys.argv[3] if len(sys.argv) > 3 else 'localhost'
- port = int(sys.argv[4]) if len(sys.argv) > 4 else 50000
- tasks_number = int(sys.argv[5]) if len(sys.argv) > 5 else 4
- A = read(fnameA)
- X = read(fnameX)
- QueueManager.register('in_queue')
- QueueManager.register('out_queue')
- m = QueueManager(address=(ip, port), authkey='blah'.encode())
- m.connect()
- out_queue = m.out_queue()
- in_queue = m.in_queue()
- task_creator(A, X, tasks_number, in_queue)
- in_queue.join()
- result = [0] * len(A)
- while not out_queue.empty():
- [worker_result, task_range] = out_queue.get()
- result[task_range[0]:task_range[1]] = worker_result
- f = open("result", "w")
- f.write(str(result))
Advertisement
Add Comment
Please, Sign In to add comment