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
我知道#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(),然后终止循环,但循环只有在终止后向服务器发出额外请求后才会退出。有一个工作关机方法会更好,请检查