使用阻塞句柄停止SocketServer

时间:2015-03-04 17:01:51

标签: python python-multithreading tcpserver

我正在使用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终止服务器,只要客户端维护打开的套接字,它仍会在句柄上被阻止。

那么即使仍有连接的客户端,我怎样才能有效地停止服务器?

1 个答案:

答案 0 :(得分:0)

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

这样守护进程实际上是可行的,即使使用进程而不是线程也不是我想要的。