2012-10-08 113 views
1

创建一个在某个时间空闲后自动关闭的Python服务器(XML-RPC服务器)最简单的方法是什么?Python服务器在闲置一段时间后自动关闭

我当时就想,像这样做,但我不知道在待办事项的事:

from SimpleXMLRPCServer import SimpleXMLRPCServer 

# my_paths variable 
my_paths = [] 

# Create server 
server = SimpleXMLRPCServer(("localhost", 7789)) 
server.register_introspection_functions() 

# TODO: set the timeout 
# TODO: set a function to be run on timeout 

class MyFunctions: 
    def add_path(paths): 
     for path in paths: 
      my_paths.append(path) 
     return "done" 

    def _dispatch(self, method, params): 
     if method == 'add_path': 
      # TODO: reset timeout 
      return add_path(*params) 
     else: 
      raise 'bad method' 

server.register_instance(MyFunctions()) 

# Run the server's main loop 
server.serve_forever() 

我也试图探索signal.alarm()下面的例子here但它不会在Windows下运行扔给我AttributeError: 'module' object has no attribute 'SIGALRM'

谢谢。

回答

1

您可以创建自己的服务器类,以延长SimpleXMLRPCServer以在空闲一段时间后关闭。

class MyXMLRPCServer(SimpleXMLRPCServer): 
    def __init__(self, addr): 
     self.idle_timeout = 5.0 # In seconds 
     self.idle_timer = Timer(self.idle_timeout, self.shutdown) 
     self.idle_timer.start() 
     SimpleXMLRPCServer.__init__(self, addr) 

    def process_request(self, request, client_address): 
     # Cancel the previous timer and create a new timer 
     self.idle_timer.cancel() 
     self.idle_timer = Timer(self.idle_timeout, self.shutdown) 
     self.idle_timer.start() 
     SimpleXMLRPCServer.process_request(self, request, client_address) 

现在,您可以使用此类来创建服务器对象。

# Create server 
server = MyXMLRPCServer(("localhost", 7789)) 
server.register_introspection_functions() 
相关问题