我刚刚重写了一些类似于基本python服务器( https://docs.python.org/3/library/socketserver.html )的东西,因为我认为我需要这样做。
我的问题是,我有吗?
我想要做的是,如果接收到某个请求(如果您愿意,这是一个停止服务器的请求),则跳出处理程序并退出服务器循环。最初,我试图通过抛出异常来跳出服务器循环,但事实证明,socketserver处理程序的运行方式是在"try catch-all expect“块中,这意味着在处理程序内部抛出的异常永远不会传播到处理程序调用函数(具有catch-all异常块的函数)之外。
那么,python是否具有可以穿透try-catch_all-expect块的长跳转机制,或者我是否可以在线程中运行serve_forever_loop,然后从处理程序中执行类似Thread.current.kill()的操作(我该怎么做?)
发布于 2015-04-22 14:39:38
据我所知,当你抛出一个异常时,没有办法跳过堆栈帧。
但是,如果您确实需要此功能,您可以为代码的一部分找到其他方法来将消息发送到另一部分。如果处理程序和服务器都在同一个解释器实例中运行(即不在不同的线程中),则可以让处理程序更改主服务器循环可以访问的一些变量,服务器循环将检查这些变量。如果您使用不同的解释器,则可以让处理程序写入服务器循环监视的日志文件。日志文件的想法有点老生常谈,但对于服务器来说,日志记录无论如何都是一件好事。
https://stackoverflow.com/questions/29789182
复制相似问题