class Server(): def __init__(self, server_port, monitor_port, daemon_process, param=None, max_process=3, process_time_out=-1, server_name=None): """ @param server_port: running server port @param monitor_port: process moniter port @param daemon_process: running process module @param param: parameter use at daemon_process @param max_process: number of simutaneously runing process @prarm process_time_out: number of process time out (process의 join parameter로 사용) < 0: (Default) when ending until = 0: not join > 0: wait time WARNING -todo...- @param server_name: monitmoniter에 표시할 server이름 None: (Default) daemon_process에서 class이름을 확인하여 사용 """ #Use ManagerServer self.daemon_process = daemon_process self.socket_queue = Queue.Queue() self.param = param #Use MoniterServer self.monitor_dic = multiprocessing.Manager().dict() if server_name is None: server_name = daemon_process.__name__ #Setup Server Conf self.conf = ServerConf(server_port, monitor_port, server_name, max_process, process_time_out) def run(self): #start monitor if self.conf.get_monitor_port() != 0: monitor_server = MoniterServer(self.conf, self.monitor_dic, self.socket_queue) monitor_server.setDaemon(True) monitor_server.start() #start process manager manager_server = ManagerServer(self.conf, self.socket_queue, self.monitor_dic, self.daemon_process, self.param) manager_server.setDaemon(True) manager_server.start() self.sock = Socket.Socket() self.sock.Bind(self.conf.get_server_port()) while True: client_sock = self.sock.Accept() if not client_sock: break print 'put', time.time() self.socket_queue.put(client_sock)