server.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.
sawine@0
     1
#!/usr/bin/python
sawine@0
     2
sawine@0
     3
import com
sawine@2
     4
import worker
sawine@0
     5
import optparse
sawine@2
     6
import subprocess
sawine@0
     7
import SocketServer
sawine@0
     8
sawine@0
     9
option_list = [
sawine@0
    10
	optparse.make_option("-q", "--quiet", action="store_true", dest="quiet", 
sawine@0
    11
		help="quiet mode", default=False)]
sawine@0
    12
	
sawine@0
    13
class Handler(SocketServer.BaseRequestHandler):
sawine@0
    14
	"""
sawine@0
    15
	"""	
sawine@0
    16
	def handle(self):
sawine@0
    17
		data = self.request[0].strip()
sawine@0
    18
		socket = self.request[1]
sawine@0
    19
		print "%s wrote:" % self.client_address[0]
sawine@0
    20
		print data
sawine@0
    21
		for key, value in com.commands.iteritems():
sawine@0
    22
			if key in data:
sawine@3
    23
				args = data.partition(key)[2].split()				
sawine@0
    24
				if args:
sawine@2
    25
					value[0](socket, self.client_address, self.worker, args)
sawine@0
    26
				else:
sawine@2
    27
					value[0](socket, self.client_address, self.worker)
sawine@0
    28
		
sawine@0
    29
class Server(SocketServer.UDPServer):
sawine@2
    30
	def __init__(self, host, port, handler, options, worker):
sawine@0
    31
		SocketServer.UDPServer.__init__(self, (host, port), handler)
sawine@0
    32
		self.host = host
sawine@0
    33
		self.port = port
sawine@0
    34
		self.handler = handler
sawine@0
    35
		self.options = options
sawine@2
    36
		self.handler.worker = worker
sawine@0
    37
	def run(self):
sawine@0
    38
		self.serve_forever()
sawine@2
    39
sawine@2
    40
def spawnWorker(server, n):
sawine@2
    41
	port = server[1] + 1
sawine@2
    42
	worker_list = [] 
sawine@2
    43
	for i in xrange(n):
sawine@3
    44
		print "starting worker %i" % (port + i)
sawine@2
    45
		#worker.spawn(server[0], port + i)
sawine@3
    46
		subprocess.Popen("python worker.py %i" % (port + i), shell=True)
sawine@2
    47
		worker_list.append((server[0], port + i)) 
sawine@2
    48
	return worker_list		
sawine@2
    49
sawine@0
    50
if __name__ == "__main__":
sawine@2
    51
	parser = optparse.OptionParser(usage="usage: %prog [options] port worker",
sawine@0
    52
		option_list=option_list)
sawine@0
    53
	options, args = parser.parse_args()
sawine@0
    54
	
sawine@0
    55
	if len(args) > 0:
sawine@2
    56
		host = "localhost"
sawine@0
    57
		port = int(args[0])
sawine@2
    58
		worker_count = int(args[1])
sawine@2
    59
		worker = spawnWorker((host, port), worker_count)
sawine@2
    60
		server = Server(host, port, Handler, options, worker)
sawine@0
    61
		server.run()