2012-02-03 4 views
2

UDP SocketServer를 만들고 있는데 UDP 연결을 닫으려는 것보다 클라이언트 쪽에서 닫는 메시지를받는다면 종료하고 싶습니다.Stop UDP SocketServer

메시지를 받으면 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 shutdown()에 대해 다음과 같이 명시합니다. "serve_forever() 루프가 중지 될 때까지 기다렸다가 기다려주십시오." 청소 및 종료를 수행하는 데 얼마나 오래 기다리고 계십니까? – jlafay

답변

0

당신이 그것을 자신의 스레드에서 서버를 실행하지 않는 것처럼, 당신은 shutdown을 사용할 수 없습니다 (당신은 그것에 대해 ThreadingMixIn을 상속해야합니다). 기능 문서 주석에서 source :

루프가 완료 될 때까지 차단됩니다. serve_forever()가 다른 스레드에서 실행 중이거나 교착 상태 인 동안 호출해야합니다.

+0

그래서 어떻게 UDP 서버를 종료 할 수 있습니까? –

+0

@KicsiMano'MyUDPHandler'도'ThreadingMixIn'에서 상속 받도록하여 자체 스레드에 넣으십시오. 문서에 모두 나와 있습니다. –