Циклы событий заканчиваются на SIGTERM, Ctrl + C или при вызове shutdown()
.
server_close()
должен вызываться после server_forever()
, чтобы закрыть сокет прослушивания.
import http.server
class StoppableHTTPServer(http.server.HTTPServer):
def run(self):
try:
self.serve_forever()
except KeyboardInterrupt:
pass
finally:
# Clean-up server (close socket, etc.)
self.server_close()
Простой сервер, который можно остановить с помощью действий пользователя (SIGTERM, Ctrl + C , ...):
server = StoppableHTTPServer(("127.0.0.1", 8080),
http.server.BaseHTTPRequestHandler)
server.run()
Сервер работает в потоке:
import threading
server = StoppableHTTPServer(("127.0.0.1", 8080),
http.server.BaseHTTPRequestHandler)
# Start processing requests
thread = threading.Thread(None, server.run)
thread.start()
# ... do things ...
# Shutdown server
server.shutdown()
thread.join()