我有一个我希望通过python中的SimpleXMLRPCServer测试的类。我设置单元测试的方式是创建一个新线程,然后在其中启动SimpleXMLRPCServer。然后我运行所有测试,最后关闭。在单独的线程中运行SimpleXMLRPCServer并关闭
这是我ServerThread:
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()
的问题是,在调用ServerThread.stop(),其次是使用Thread.stop()和的Thread.join()不会导致线程停止正常,如果它已经在handle_request中等待请求。而且由于在这里我似乎没有任何中断或超时机制,所以我不知道如何干净地关闭服务器线程。
我会保持这种方法铭记未来。我更喜欢跨平台的解决方案,所以关机方法似乎最合理。我通过发送一个虚拟请求来解决这个问题,该请求将以self.running将会终止线程为false。 – Staale 2009-02-03 14:20:45
一个子进程是跨平台的。子过程加上自毁方法效果最好。 – 2009-02-03 14:57:31