worker.py
author Eugen Sawin <sawine@me73.com>
Mon, 14 Jun 2010 14:32:12 +0200
changeset 3 234fa7eea0df
parent 2 b887ce19c300
child 4 4cee17e91d29
permissions -rw-r--r--
Fixed process forking. Weird results when using two workers.
     1 #!/usr/bin/python
     2 
     3 import com
     4 import model
     5 import optparse
     6 import pickle
     7 import SocketServer
     8 
     9 option_list = [
    10 	optparse.make_option("-q", "--quiet", action="store_true", dest="quiet", 
    11 		help="quiet mode", default=False)]
    12 
    13 def spawn(host, port):
    14 	return Worker(host, port, Handler, ())
    15 		
    16 class Handler(SocketServer.BaseRequestHandler):
    17 	"""
    18 	"""	
    19 	def handle(self):
    20 		data = self.request[0].strip()
    21 		socket = self.request[1]
    22 		model_size = int(data[:10])
    23 		model = pickle.loads(data[10:10+model_size])
    24 		max_iter = int(data[10+model_size:20+model_size])
    25 		model.update(max_iter)
    26 		
    27 class Worker(SocketServer.UDPServer):
    28 	def __init__(self, host, port, handler, options):
    29 		SocketServer.UDPServer.__init__(self, (host, port), handler)
    30 		self.host = host
    31 		self.port = port
    32 		self.handler = handler
    33 		self.options = options
    34 	def run(self):
    35 		print "worker running at port %s" % self.port
    36 		self.serve_forever()
    37 
    38 if __name__ == "__main__":
    39 	parser = optparse.OptionParser(usage="usage: %prog [options] port",
    40 		option_list=option_list)
    41 	options, args = parser.parse_args()
    42 	
    43 	if len(args) > 0:
    44 		port = int(args[0])
    45 		worker = Worker("localhost", port, Handler, options)
    46 		worker.run()