У меня была та же проблема, и после нескольких часов исследований я решил ее, переключившись с использования моего собственного цикла handle_request () на serve_forever () , чтобы запустить сервер.
serve_forever () запускает внутренний цикл, подобный вашему. Этот цикл можно остановить, вызвав shutdown () . После остановки цикла можно остановить сервер с помощью server_close () .
Я не знаю, почему это работает, а цикл handle_request () - нет, но это работает; P
Вот мой код:
from threading import Thread
from xmlrpc.server import SimpleXMLRPCServer
from pyWebService.server.service.WebServiceRequestHandler import WebServiceRquestHandler
class WebServiceServer(Thread):
def __init__(self, ip, port):
super(WebServiceServer, self).__init__()
self.running = True
self.server = SimpleXMLRPCServer((ip, port),requestHandler=WebServiceRquestHandler)
self.server.register_introspection_functions()
def register_function(self, function):
self.server.register_function(function)
def run(self):
self.server.serve_forever()
def stop_server(self):
self.server.shutdown()
self.server.server_close()
print("starting server")
webService = WebServiceServer("localhost", 8010)
webService.start()
print("stopping server")
webService.stop_server()
webService.join()
print("server stopped")