Python SimpleHTTPServer在多次请求后挂起

Python SimpleHTTPServer在多次请求后挂起,python,tcpserver,socketserver,simplehttpserver,Python,Tcpserver,Socketserver,Simplehttpserver,我正在编写一个简单的集成测试,它包括以下内容: 启动提供待测试页面的简单HTTP服务器 启动加载此页面的各种不同浏览器以确认一切正常 我知道#2有效,我对此没有问题。 但是#1仅适用于前几个浏览器,然后挂起,导致后续浏览器测试失败。我真的不明白为什么 在我的代码中,我要做的是: 类测试: def设置_类(cls): ready\u信号=threading.Event() cls.port=9000 cls.docroot=/tmp cls.http_包装器=SimpleHttpRap(端口=cl

我正在编写一个简单的集成测试,它包括以下内容:

  • 启动提供待测试页面的简单HTTP服务器
  • 启动加载此页面的各种不同浏览器以确认一切正常
    我知道#2有效,我对此没有问题。

    但是#1仅适用于前几个浏览器,然后挂起,导致后续浏览器测试失败。我真的不明白为什么

    在我的代码中,我要做的是:

    类测试:
    def设置_类(cls):
    ready\u信号=threading.Event()
    cls.port=9000
    cls.docroot=/tmp
    cls.http_包装器=SimpleHttpRap(端口=cls.port,docroot=cls.docroot,就绪_信号)
    后台线程=threading.thread(目标=http\u wrapper.start)
    后台线程.daemon=True
    后台线程.start()
    ready_信号。wait(10)#等待线程准备就绪(或在超时后继续)
    def测试(自我):
    ip=获取我的ip地址()
    self.browser=webdriver.Remote(此处有一些参数)
    self.browser.get('http://'+ip+“:“+cls.port+cls.docroot+'/test.html'))
    #在类似的测试已经运行并成功后,这将挂起
    def拆卸类(cls):
    cls.http_wrapper.stop()
    类SimpleHttpRap(对象):
    def\uuuu初始(自身、端口、docroot、就绪信号):
    self.port=端口
    self.docroot=docroot
    self.request\u handler=SimpleHTTPServer.SimpleHTTPRequestHandler
    self.server=None
    self.ready\u信号=ready\u信号
    def启动(自):
    os.chdir(self.docroot)
    尝试:
    log.info(“试图绑定到端口:”+str(self.port))
    self.server=SocketServer.TCPServer((“”,self.port),self.request\u处理程序)
    self.server.allow\u reuse\u address=True
    log.info(“成功”)
    self.ready_signal.set()#向主线程发出我们准备就绪的信号
    self.server.serve_ever()
    除socket.error外:
    log.error(“无法绑定到地址(端口已在使用)”+str(self.port))
    
    我认为它处于某种死锁状态,因为当我尝试调用cls.http_wrapper.server.shutdown()时,它挂起了

    然而,我不知道为什么。这里只有一个线程在后台运行,其他测试似乎都可以。但过了几分钟,一切都挂了。
    从浏览器的角度来看,它会尝试加载页面一段时间,直到由于连接被拒绝而最终超时


    有没有人知道这可能是什么原因,或者我可以做些什么来进一步调查?在这一点上,我不知所措,正在考虑尝试别的东西

    你有没有找到解决办法?我的解决方法是在while循环中使用handle_request(),然后终止循环,但循环只有在终止后向服务器发出额外请求后才会退出。有一个工作关机方法会更好,请检查