0

Ich versuche, einen einfachen HTTP-Server in Python in einem Thread einzurichten.Warum stoppt dieser Thread in Python nicht?

class MyHandler(SimpleHTTPRequestHandler): 
    def do_GET(self): 
     if self.path == '/shutdown': 
      print 'Got shutdown request' 
      self.server.running = False 
     self.send_response(200) 

class Server(): 

    def __init__(self): 
    self._http_server = HTTPServer(('0.0.0.0', 8123), MyHandler) 
    self._http_server.running = True 
    self._http_server_thread = threading.Thread(target = self._run_http_server, name = 'serverthread') 
    self._http_server_thread.start() 


    def _run_http_server(self): 
     print 'Server started' 
     while(self._http_server.running): 
      self._http_server.handle_request() 

     print 'Server finished serving' 
     self._http_server.shutdown() 


    def check_status(self): 
     l = threading.enumerate() 
     for i in l: 
      print i.name 


serv = Server() 
print 'Sleeping for 20 seconds' 
time.sleep(20) 
req = urllib2.urlopen('http://127.0.0.1:8123/shutdown') 
print 'Finished sleeping' 
serv.check() 

Meine Vermutung ist, sobald die _run_http_server Ausführung beendet, sollte der Faden nicht mehr ausgeführt, aber es doesn't.I diese Ausgabe erhalten, aber der Thread läuft weiter. Kann jemand darauf hinweisen, warum der Thread nicht aufhört?

Server started 
Sleeping for 20 seconds 
Got shut down request 
127.0.0.1 - - [09/Jul/2016 12:17:17] "GET /shutdown HTTP/1.1" 200 - 
Server finished serving 
Finished sleeping 
MainThread 
serverthread 
True 

Antwort

2

In Ihrem Code Sie haben Ihre eigene Anfrage Verarbeitungsschleife (statt HTTPServer.serve_forever() der Verwendung). Doch rufen Sie HTTPServer.shutdown(), deren Aufgabe es ist, die serve_forever() Schleife zu stoppen und zu warten, bis es tut. Seit serve_forever() wurde nicht einmal gestartet, shutdown() kehrt nie zurück (es wartet tatsächlich auf serve_forever() zu starten und sofort zu stoppen). Das Entfernen der self._http_server.shutdown() Zeile behebt das Problem.

+0

Danke! Etwas gelernt. – user1429322