2012-02-03 144 views
2

我创建一个UDP套接字服务器,并且我想关闭,如果我从客户端收到关闭消息比我想关闭UDP连接。停止UDP套接字服务器

当我收到消息时,将显示Begin,但不会显示Finished。我如何退出此线程?

class MyUDPHandler(SocketServer.BaseRequestHandler):  
    def handle(self): 
     data = self.request[0].strip()   
     dic = self.string_XML_to_dic(data) 
     if(dic['Cmd'] == str(UDPConst().SHUT_DOWN)): 
      print('Begin')   
      self.server.shutdown() 
      print("Finished") 

if __name__ == "__main__": 
    HOST, PORT = "", prop['udpport'] 
    server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)  
    server.serve_forever() 
+0

http://docs.python.org/library/socketserver.html声明关闭()“告诉serve_forever()循环停止并等待,直到它”。你等待它执行清理和关闭多久了? – jlafay 2012-02-03 14:09:52

回答

0

当你没有运行在它自己的线程服务器(你需要继承ThreadingMixIn为),你不能使用shutdown,因为它会导致死锁。从功能文档注释source

阻塞直到循环结束。这个必须被调用,而 serve_forever()正在另一个线程中运行,否则它会死锁 。

+0

那么如何关闭UDP服务器? – 2012-02-03 14:17:50

+0

@KicsiMano让'MyUDPHandler'继承自'ThreadingMixIn',把它放在自己的线程中。这些都在文档中。 – 2012-02-03 14:25:55