Added worker result feedback.
authorEugen Sawin <sawine@me73.com>
Mon, 14 Jun 2010 23:16:47 +0200
changeset 44cee17e91d29
parent 3 234fa7eea0df
child 5 5ab3cc2e7851
Added worker result feedback.
algorithm.py
com.py
server.py
worker.py
     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):