在异步(线程)SocketServer的示例中,启动了一个服务器线程(称为server_thread),以便为每个请求启动新线程。由于捕捉KeyboardInterrupts的一些问题,我开始寻找类似的代码,并发现没有明显的区别,当不使用服务器线程,但ctrl-c实际上工作。SocketServer ThreadingMixIn目的server_thread
即使我的代码中使用server_thread工作时,我非常想知道
1)为什么没有一个简单的“尝试”赶上一个KeyboardInterrupt工作?
2)来自示例的server_thread服务有什么好处 - 与我的更简单的示例相反?
从Python的SocketServer例如,在尝试捕获一个KeyboardInterrupt不起作用:
if __name__ == "__main__":
server = ThreadedTCPServer(serverAddr, SomeCode)
<snip>
# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)
server_thread.start()
我简单的例子,CTRL-C的作品。
if __name__ == "__main__":
server = ThreadedTCPServer(serverAddr, SomeCode)
try:
server.serve_forever()
print "ctrl-c to exit"
except KeyboardInterrupt:
print "interrupt received, exiting"
server.shutdown()
您可以在'serve_forever()'中打断ThreadedTCPServer。它没有什么重要的。重要的任务可能在您可能要等待的处理程序线程中。 – User