server.py
author Eugen Sawin <sawine@me73.com>
Mon, 14 Jun 2010 23:16:47 +0200
changeset 4 4cee17e91d29
parent 3 234fa7eea0df
child 5 5ab3cc2e7851
permissions -rw-r--r--
Added worker result feedback.
     1 #!/usr/bin/python
     2 
     3 import com
     4 import worker
     5 import optparse
     6 import pickle
     7 import hashlib
     8 import subprocess
     9 import SocketServer
    10 
    11 option_list = [
    12 	optparse.make_option("-q", "--quiet", action="store_true", dest="quiet", 
    13 		help="quiet mode", default=False)]
    14 	
    15 class Handler(SocketServer.BaseRequestHandler):
    16 	"""
    17 	"""	
    18 	def handle(self):
    19 		data = self.request[0]
    20 		socket = self.request[1]
    21 		print "%s wrote:" % self.client_address[0]
    22 		print data
    23 		key_found = False
    24 		for key, value in com.commands.iteritems():
    25 			if key in data:
    26 				key_found = True
    27 				args = data.partition(key)[2].split()				
    28 				if args:
    29 					value[0](socket, self.client_address, self.worker, args)
    30 				else:
    31 					value[0](socket, self.client_address, self.worker)
    32 		if not key_found:
    33 			cell = pickle.loads(data)
    34 			self.cells[cell[0]] = cell[1]
    35 			#print hashlib.sha256(str(self.cells)).hexdigest()
    36 			
    37 		
    38 class Server(SocketServer.UDPServer):
    39 	def __init__(self, host, port, handler, options, worker):
    40 		SocketServer.UDPServer.__init__(self, (host, port), handler)
    41 		self.host = host
    42 		self.port = port
    43 		self.handler = handler
    44 		self.options = options
    45 		self.handler.worker = worker
    46 		self.handler.cells = {}
    47 	def run(self):
    48 		self.serve_forever()
    49 
    50 def spawnWorker(server, n):
    51 	port = server[1] + 1
    52 	worker_list = [] 
    53 	for i in xrange(n):
    54 		print "starting worker %i" % (port + i)
    55 		#worker.spawn(server[0], port + i)
    56 		subprocess.Popen("python worker.py %i" % (port + i), shell=True)
    57 		worker_list.append((server[0], port + i)) 
    58 	return worker_list		
    59 
    60 if __name__ == "__main__":
    61 	parser = optparse.OptionParser(usage="usage: %prog [options] port worker",
    62 		option_list=option_list)
    63 	options, args = parser.parse_args()
    64 	
    65 	if len(args) > 0:
    66 		host = "localhost"
    67 		port = int(args[0])
    68 		worker_count = int(args[1])
    69 		worker = spawnWorker((host, port), worker_count)
    70 		server = Server(host, port, Handler, options, worker)
    71 		server.run()