worker.py
author Eugen Sawin <sawine@me73.com>
Tue, 15 Jun 2010 14:58:05 +0200
changeset 5 5ab3cc2e7851
parent 4 4cee17e91d29
child 6 9147c845cecb
permissions -rw-r--r--
Added debugging view. Packet loss suspected.
     1 #!/usr/bin/python
     2 
     3 import com
     4 import model
     5 import optparse
     6 import time
     7 import pickle
     8 import SocketServer
     9 
    10 option_list = [
    11 	optparse.make_option("-q", "--quiet", action="store_true", dest="quiet", 
    12 		help="quiet mode", default=False)]
    13 
    14 def spawn(host, port):
    15 	return Worker(host, port, Handler, ())
    16 		
    17 class Handler(SocketServer.BaseRequestHandler):
    18 	"""
    19 	"""	
    20 	def handle(self):
    21 		data = self.request[0].strip()
    22 		socket = self.request[1]
    23 		model_size = int(data[:10])
    24 		model = pickle.loads(data[10:10+model_size])
    25 		max_iter = int(data[10+model_size:20+model_size])
    26 		model.update(max_iter)
    27 		for cell in model.cells.iteritems():
    28 			time.sleep(0.01)
    29 			socket.sendto(model.name + " " + pickle.dumps(cell), 
    30 				self.client_address)
    31 		
    32 class Worker(SocketServer.UDPServer):
    33 	def __init__(self, host, port, handler, options):
    34 		SocketServer.UDPServer.__init__(self, (host, port), handler)
    35 		self.host = host
    36 		self.port = port
    37 		self.handler = handler
    38 		self.options = options
    39 	def run(self):
    40 		print "worker running at port %s" % self.port
    41 		self.serve_forever()
    42 
    43 if __name__ == "__main__":
    44 	parser = optparse.OptionParser(usage="usage: %prog [options] port",
    45 		option_list=option_list)
    46 	options, args = parser.parse_args()
    47 	
    48 	if len(args) > 0:
    49 		port = int(args[0])
    50 		worker = Worker("localhost", port, Handler, options)
    51 		worker.run()