2013-09-26 126 views
2

當我收到StopIteration異常時,如何關閉此服務器? sys.exit()不起作用。如何從Python中的請求處理程序中關閉HTTPServer?

#!/usr/bin/env python 

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer 

PORT_NUMBER = 2000 

from itertools import islice 
filename = 'data/all.txt' 
file = open(filename, 'r') 
lines_gen = islice(file, None) 

class MyHandler(BaseHTTPRequestHandler): 
    def do_GET(self): 
     global lines_gen 

     self.send_response(200) 
     self.send_header('Content-type','text/plain') 
     self.end_headers() 

     try: 
      for i in range(10): 
       next_line = lines_gen.next() 
       self.wfile.write(next_line) 
     except StopIteration: 
      # return response and shutdown the server 
      # ????? 

     return 

try: 
    server = HTTPServer(('', PORT_NUMBER), MyHandler) 
    print('Started httpserver on port ' , PORT_NUMBER) 
    server.serve_forever() 

except KeyboardInterrupt: 
    print('^C received, shutting down the web server') 
    server.socket.close() 

回答

11

只需在第二個線程中調用shutdown()即可。

# return response and shutdown the server 
import threading 
assassin = threading.Thread(target=server.shutdown) 
assassin.daemon = True 
assassin.start() 
+0

太棒了。謝謝。 – Jay

相關問題