使用阻塞句柄停止 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
。
守护进程实际上以这种方式工作,即使使用进程而不是线程并不是我想要的。
我正在使用 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
。
守护进程实际上以这种方式工作,即使使用进程而不是线程并不是我想要的。