停止UDP套接字服务器
问题描述:
我创建一个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()
答
当你没有运行在它自己的线程服务器(你需要继承ThreadingMixIn
为),你不能使用shutdown
,因为它会导致死锁。从功能文档注释source:
阻塞直到循环结束。这个必须被调用,而 serve_forever()正在另一个线程中运行,否则它会死锁 。
+0
那么如何关闭UDP服务器? – 2012-02-03 14:17:50
+0
@KicsiMano让'MyUDPHandler'继承自'ThreadingMixIn',把它放在自己的线程中。这些都在文档中。 – 2012-02-03 14:25:55
http://docs.python.org/library/socketserver.html声明关闭()“告诉serve_forever()循环停止并等待,直到它”。你等待它执行清理和关闭多久了? – jlafay 2012-02-03 14:09:52