使用阻塞句柄停止 SocketServer

Stopping SocketServer with blocking handle

我正在使用 SocketServer.ThreadingMixIn,与 docs 中的非常相似。

除了在自己的脚本上将客户端提取到 运行 之外,我还重新定义了 handle 方法,因为我希望与客户端的连接保持活动状态并接收更多消息:

def handle(self):
    try:
        while True:
            data = self.request.recv(1024)
            if not data:
                break # Quits the thread if the client was disconnected
            else:
                print(cur_thread.name)
            self.request.send(data)
    except:
        pass

问题是,即使我尝试使用 server.shutdown()KeyboardInterrupt 终止服务器,只要客户端保持打开的套接字,它仍然会在句柄上被阻塞。

那么,即使还有连接的客户端,我如何才能有效地停止服务器?

我找到的最佳解决方案是使用 SocketServer.ForkingMixIn 而不是 SocketServer.ThreadingMixIn

守护进程实际上以这种方式工作,即使使用进程而不是线程并不是我想要的。