在单独的线程中运行 SimpleXMLRPCServer 并关闭

Sta*_*ale 6 python multithreading simplexmlrpcserver

我有一个类,我希望通过 python 中的 SimpleXMLRPCServer 进行测试。我设置单元测试的方式是创建一个新线程,然后在其中启动 SimpleXMLRPCServer。然后我跑了所有的测试,最后关机。

这是我的服务器线程:

class ServerThread(Thread):
    running = True
    def run(self):
        self.server = #Creates and starts SimpleXMLRPCServer

        while (self.running):
            self.server.handle_request()

    def stop(self):
        self.running = False
        self.server.server_close()
Run Code Online (Sandbox Code Playgroud)

问题是,如果线程已经在等待 handle_request 中的请求,那么调用 ServerThread.stop(),然后调用 Thread.stop() 和 Thread.join() 不会导致线程正确停止。而且由于这里似乎没有我可以使用的任何中断或超时机制,因此我不知道如何干净地关闭服务器线程。

S.L*_*ott 1

两个建议。

建议一是使用单独的进程而不是单独的线程。

  • 创建一个独立的 XMLRPC 服务器程序。

  • 从 开始subprocess.Popen()

  • 测试完成后杀死它。在标准操作系统(不是 Windows)中,kill 效果很好。然而,在 Windows 中,没有简单的终止功能,但有一些方法可以实现这一点。

另一个建议是在 XMLRPC 服务器中添加一个导致服务器自毁的功能。您定义一个函数来调用sys.exit()os.abort()或 引发类似的异常,该异常将停止该过程。