我正在使用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
终止服务器,只要客户端维护打开的套接字,它仍会在句柄上被阻止。
那么即使仍有连接的客户端,我怎样才能有效地停止服务器?
答案 0 :(得分:0)
我找到的最佳解决方案是使用SocketServer.ForkingMixIn
代替SocketServer.ThreadingMixIn
。
这样守护进程实际上是可行的,即使使用进程而不是线程也不是我想要的。