Skip to main content
 首页 » 编程设计

python之停止 UDP SocketServer

2025年05月04日13cloudgamer

我正在创建一个 UDP SocketServer,如果我收到来自客户端的关闭消息,我想关闭而不是关闭 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 中的函数文档注释:

Blocks until the loop has finished. This must be called while serve_forever() is running in another thread, or it will deadlock.