# HG changeset patch # User Eugen Sawin # Date 1276550207 -7200 # Node ID 4cee17e91d299ba171347d563d8cf8185d9bad17 # Parent 234fa7eea0df9d6f2c0a1ea88e7b79ec0db488e4 Added worker result feedback. diff -r 234fa7eea0df -r 4cee17e91d29 algorithm.py --- a/algorithm.py Mon Jun 14 14:32:12 2010 +0200 +++ b/algorithm.py Mon Jun 14 23:16:47 2010 +0200 @@ -39,7 +39,7 @@ break if isPeriodic(z[-10:-1]): break - return z + return z[-1] @profile def resolve(self, max_iter): cells = {} @@ -50,6 +50,7 @@ for y in xrange(self.resolution[1]): for x in xrange(self.resolution[0]): c = self.range[0] + c_diff * complex(x, y) - self.test(c, max_iter) + cells[c] = self.test(c, max_iter) + return cells diff -r 234fa7eea0df -r 4cee17e91d29 com.py --- a/com.py Mon Jun 14 14:32:12 2010 +0200 +++ b/com.py Mon Jun 14 23:16:47 2010 +0200 @@ -18,11 +18,11 @@ def saveModel(socket, client, worker, (name,)): model = lookupModel(socket, client, name) if model: - pickle.dump(model, open(name, "w")) + pickle.dump(model, open(name + ".model", "w")) socket.sendto("model %s saved\n" % name, client) def loadModel(socket, client, worker, (name,)): - model.addModel(pickle.load(open(name, "r"))) + model.addModel(pickle.load(open(name + ".model", "r"))) socket.sendto("model %s loaded\n" % name, client) def lookupModel(socket, client, name): @@ -72,7 +72,8 @@ print model.range print model.resolution dump = pickle.dumps(model) - socket.sendto("%010i%s%010i" % (len(dump), dump, int(iterations)), w) + socket.sendto("%010i%s%010i" % (len(dump), dump, + int(iterations)), w) socket.sendto("model %s updated with max %s iterations\n" % (modelName, iterations), client) model.range = (complex(begin_x, begin_y), complex(end_x, end_y)) diff -r 234fa7eea0df -r 4cee17e91d29 server.py --- a/server.py Mon Jun 14 14:32:12 2010 +0200 +++ b/server.py Mon Jun 14 23:16:47 2010 +0200 @@ -3,6 +3,8 @@ import com import worker import optparse +import pickle +import hashlib import subprocess import SocketServer @@ -14,17 +16,24 @@ """ """ def handle(self): - data = self.request[0].strip() + data = self.request[0] socket = self.request[1] print "%s wrote:" % self.client_address[0] print data + key_found = False for key, value in com.commands.iteritems(): if key in data: + key_found = True args = data.partition(key)[2].split() if args: value[0](socket, self.client_address, self.worker, args) else: value[0](socket, self.client_address, self.worker) + if not key_found: + cell = pickle.loads(data) + self.cells[cell[0]] = cell[1] + #print hashlib.sha256(str(self.cells)).hexdigest() + class Server(SocketServer.UDPServer): def __init__(self, host, port, handler, options, worker): @@ -34,6 +43,7 @@ self.handler = handler self.options = options self.handler.worker = worker + self.handler.cells = {} def run(self): self.serve_forever() diff -r 234fa7eea0df -r 4cee17e91d29 worker.py --- a/worker.py Mon Jun 14 14:32:12 2010 +0200 +++ b/worker.py Mon Jun 14 23:16:47 2010 +0200 @@ -23,6 +23,8 @@ model = pickle.loads(data[10:10+model_size]) max_iter = int(data[10+model_size:20+model_size]) model.update(max_iter) + for cell in model.cells.iteritems(): + socket.sendto(pickle.dumps(cell), self.client_address) class Worker(SocketServer.UDPServer): def __init__(self, host, port, handler, options):