Added worker result feedback.
1.1 --- a/algorithm.py Mon Jun 14 14:32:12 2010 +0200
1.2 +++ b/algorithm.py Mon Jun 14 23:16:47 2010 +0200
1.3 @@ -39,7 +39,7 @@
1.4 break
1.5 if isPeriodic(z[-10:-1]):
1.6 break
1.7 - return z
1.8 + return z[-1]
1.9 @profile
1.10 def resolve(self, max_iter):
1.11 cells = {}
1.12 @@ -50,6 +50,7 @@
1.13 for y in xrange(self.resolution[1]):
1.14 for x in xrange(self.resolution[0]):
1.15 c = self.range[0] + c_diff * complex(x, y)
1.16 - self.test(c, max_iter)
1.17 + cells[c] = self.test(c, max_iter)
1.18 + return cells
1.19
1.20
2.1 --- a/com.py Mon Jun 14 14:32:12 2010 +0200
2.2 +++ b/com.py Mon Jun 14 23:16:47 2010 +0200
2.3 @@ -18,11 +18,11 @@
2.4 def saveModel(socket, client, worker, (name,)):
2.5 model = lookupModel(socket, client, name)
2.6 if model:
2.7 - pickle.dump(model, open(name, "w"))
2.8 + pickle.dump(model, open(name + ".model", "w"))
2.9 socket.sendto("model %s saved\n" % name, client)
2.10
2.11 def loadModel(socket, client, worker, (name,)):
2.12 - model.addModel(pickle.load(open(name, "r")))
2.13 + model.addModel(pickle.load(open(name + ".model", "r")))
2.14 socket.sendto("model %s loaded\n" % name, client)
2.15
2.16 def lookupModel(socket, client, name):
2.17 @@ -72,7 +72,8 @@
2.18 print model.range
2.19 print model.resolution
2.20 dump = pickle.dumps(model)
2.21 - socket.sendto("%010i%s%010i" % (len(dump), dump, int(iterations)), w)
2.22 + socket.sendto("%010i%s%010i" % (len(dump), dump,
2.23 + int(iterations)), w)
2.24 socket.sendto("model %s updated with max %s iterations\n"
2.25 % (modelName, iterations), client)
2.26 model.range = (complex(begin_x, begin_y), complex(end_x, end_y))
3.1 --- a/server.py Mon Jun 14 14:32:12 2010 +0200
3.2 +++ b/server.py Mon Jun 14 23:16:47 2010 +0200
3.3 @@ -3,6 +3,8 @@
3.4 import com
3.5 import worker
3.6 import optparse
3.7 +import pickle
3.8 +import hashlib
3.9 import subprocess
3.10 import SocketServer
3.11
3.12 @@ -14,17 +16,24 @@
3.13 """
3.14 """
3.15 def handle(self):
3.16 - data = self.request[0].strip()
3.17 + data = self.request[0]
3.18 socket = self.request[1]
3.19 print "%s wrote:" % self.client_address[0]
3.20 print data
3.21 + key_found = False
3.22 for key, value in com.commands.iteritems():
3.23 if key in data:
3.24 + key_found = True
3.25 args = data.partition(key)[2].split()
3.26 if args:
3.27 value[0](socket, self.client_address, self.worker, args)
3.28 else:
3.29 value[0](socket, self.client_address, self.worker)
3.30 + if not key_found:
3.31 + cell = pickle.loads(data)
3.32 + self.cells[cell[0]] = cell[1]
3.33 + #print hashlib.sha256(str(self.cells)).hexdigest()
3.34 +
3.35
3.36 class Server(SocketServer.UDPServer):
3.37 def __init__(self, host, port, handler, options, worker):
3.38 @@ -34,6 +43,7 @@
3.39 self.handler = handler
3.40 self.options = options
3.41 self.handler.worker = worker
3.42 + self.handler.cells = {}
3.43 def run(self):
3.44 self.serve_forever()
3.45
4.1 --- a/worker.py Mon Jun 14 14:32:12 2010 +0200
4.2 +++ b/worker.py Mon Jun 14 23:16:47 2010 +0200
4.3 @@ -23,6 +23,8 @@
4.4 model = pickle.loads(data[10:10+model_size])
4.5 max_iter = int(data[10+model_size:20+model_size])
4.6 model.update(max_iter)
4.7 + for cell in model.cells.iteritems():
4.8 + socket.sendto(pickle.dumps(cell), self.client_address)
4.9
4.10 class Worker(SocketServer.UDPServer):
4.11 def __init__(self, host, port, handler, options):