私は「私はおそらくこれを自分でやらないだろうが、私は過去にそうしている」と言うことから始めるべきです。(SocketServer.pyからの)serve_foreverメソッドは次のようになります。
def serve_forever(self):
"""Handle one request at a time until doomsday."""
while 1:
self.handle_request()
(サブクラス内で)while 1
をwhile self.should_be_running
に置き換えて、別のスレッドからその値を変更することができます。何かのようなもの:
def stop_serving_forever(self):
"""Stop handling requests"""
self.should_be_running = 0
# Make a fake request to the server, to really force it to stop.
# Otherwise it will just stop on the next request.
# (Exercise for the reader.)
self.make_a_fake_request_to_myself()
編集:私はその時に使用した実際のコードを掘り起こしました:
class StoppableRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
stopped = False
allow_reuse_address = True
def __init__(self, *args, **kw):
SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, *args, **kw)
self.register_function(lambda: 'OK', 'ping')
def serve_forever(self):
while not self.stopped:
self.handle_request()
def force_stop(self):
self.server_close()
self.stopped = True
self.create_dummy_request()
def create_dummy_request(self):
server = xmlrpclib.Server('http://%s:%s' % self.server_address)
server.ping()