问题
How do I shutdown this server when I receive the StopIteration exception? sys.exit() does not work.
#!/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()
回答1:
Just call shutdown()
in a second thread.
# return response and shutdown the server
import threading
assassin = threading.Thread(target=server.shutdown)
assassin.daemon = True
assassin.start()
来源:https://stackoverflow.com/questions/19040055/how-do-i-shutdown-an-httpserver-from-inside-a-request-handler-in-python