2

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()
4

2 に答える 2

0

サーバーを独自のスレッドで実行していないため(そのために継承する必要があります)、デッドロックが発生するためThreadingMixIn使用できません。ソースshutdownの関数ドキュメントのコメントから:

ループが終了するまでブロックします。これは、serve_forever() が別のスレッドで実行されている間に呼び出す必要があります。そうしないと、デッドロックが発生します。

于 2012-02-03T14:12:57.683 に答える