2014-04-29 23 views
0

我有我使用8000端口運行本地HTTP服務器下面的代碼:HTTPServer.shutdown回報,但插座仍然是開放

# Omitted imports and irrelevant things for brevity. 

class ThreadedHTTPServer(SocketServer.ThreadingMixIn, HTTPServer): 
    pass 

class MyClass(object): 

    server = None 

    def start_server(self): 
     handler = MyPageHandler 
     self.server = ThreadedHTTPServer(('', 8000), handler) 

     server_thread = threading.Thread(target=self.server.serve_forever) 
     server_thread.daemon = False 
     server_thread.start() 

    def stop_server(self): 
     self.server.shutdown() 

但是偶爾當stop_server返回時,監聽套接字仍然會開幕。我通過將os.system("netstat -ln | grep 8000")置於stop_server的末尾來驗證這一點,並且它經常表明套接字仍在監聽。

一旦套接字已關閉,是否有辦法只從stop_server返回?

+0

只是嘗試socket.shutdown()前一次socket.close(),看看是否有新的變化。 –

+0

這是做到這一點的正確方法嗎?我目前不直接訪問套接字,只需使用'HTTPServer'類。 – DanielGibbs

+0

也許這提供了一些提示http://stackoverflow.com/a/20746459/2382792 –

回答

0

它看起來像這樣,通過加入server.server_close()爲@解決ρss建議:

def stop_server(self): 
    self.server.shutdown() 
    self.server.server_close()