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