# HG changeset patch # User Eugen Sawin # Date 1276606685 -7200 # Node ID 5ab3cc2e7851e3809216a3a70a8582dbcb67bd2b # Parent 4cee17e91d299ba171347d563d8cf8185d9bad17 Added debugging view. Packet loss suspected. diff -r 4cee17e91d29 -r 5ab3cc2e7851 algorithm.py --- a/algorithm.py Mon Jun 14 23:16:47 2010 +0200 +++ b/algorithm.py Tue Jun 15 14:58:05 2010 +0200 @@ -1,5 +1,6 @@ import time - +#cells range -2.2-1.4j 1+1.4j res 1000x1000 sha256: 82fe54e221a7ac3283443fc189bb0baf579bba013a7ed3405606bb2dd8c03127 +#empty cells sha256: 44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a def profile(func): def wrapper(*arg): t1 = time.clock() diff -r 4cee17e91d29 -r 5ab3cc2e7851 com.py --- a/com.py Mon Jun 14 23:16:47 2010 +0200 +++ b/com.py Tue Jun 15 14:58:05 2010 +0200 @@ -1,5 +1,7 @@ import model import pickle +import hashlib +from operator import attrgetter commands = {} @@ -24,7 +26,11 @@ def loadModel(socket, client, worker, (name,)): model.addModel(pickle.load(open(name + ".model", "r"))) socket.sendto("model %s loaded\n" % name, client) - + +def getModel(name): + if name in model.models: + return model.models[name] + def lookupModel(socket, client, name): if name not in model.models: socket.sendto("model %s not found\n" % name, client) @@ -71,6 +77,7 @@ complex(new_end_x, end_y)) print model.range print model.resolution + model.cells = {} dump = pickle.dumps(model) socket.sendto("%010i%s%010i" % (len(dump), dump, int(iterations)), w) @@ -78,7 +85,18 @@ % (modelName, iterations), client) model.range = (complex(begin_x, begin_y), complex(end_x, end_y)) model.resolution = old_res - + +def view(socket, client, worker, (name,)): + model = lookupModel(socket, client, name) + if model: + keys = model.cells.keys() + keys.sort(key=attrgetter("real", "imag")) + cells = {} + for k in keys: + cells[k] = model.cells[k] + print "size: %i hash: %s" % (len(cells), + hashlib.sha256(str(cells)).hexdigest()) + commands = {"help": (help, "help"), "create model": (createModel, "creates a new model"), "delete model": (deleteModel, "deletes a model"), @@ -87,4 +105,5 @@ "set resolution": (setResolution, "sets the model resolution"), "set range": (setRange, "sets the model range"), "update": (update, "updates the model data"), + "view": (view, "shows the model data"), "add observer": (addObserver, "adds an observer to a model's events"),} diff -r 4cee17e91d29 -r 5ab3cc2e7851 server.py --- a/server.py Mon Jun 14 23:16:47 2010 +0200 +++ b/server.py Tue Jun 15 14:58:05 2010 +0200 @@ -18,8 +18,8 @@ def handle(self): data = self.request[0] socket = self.request[1] - print "%s wrote:" % self.client_address[0] - print data + #print "%s wrote:" % self.client_address[0] + #print data key_found = False for key, value in com.commands.iteritems(): if key in data: @@ -30,8 +30,12 @@ else: value[0](socket, self.client_address, self.worker) if not key_found: - cell = pickle.loads(data) - self.cells[cell[0]] = cell[1] + model_name, _, cell_data = data.partition(" ") + cell = pickle.loads(cell_data) + #self.cells[cell[0]] = cell[1] + model = com.getModel(model_name) + #print cell + model.cells[cell[0]] = cell[1] #print hashlib.sha256(str(self.cells)).hexdigest() diff -r 4cee17e91d29 -r 5ab3cc2e7851 worker.py --- a/worker.py Mon Jun 14 23:16:47 2010 +0200 +++ b/worker.py Tue Jun 15 14:58:05 2010 +0200 @@ -3,6 +3,7 @@ import com import model import optparse +import time import pickle import SocketServer @@ -24,7 +25,9 @@ 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) + time.sleep(0.01) + socket.sendto(model.name + " " + pickle.dumps(cell), + self.client_address) class Worker(SocketServer.UDPServer): def __init__(self, host, port, handler, options):