Python SimpleHTTPServer在几个请求后挂起



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

  1. 启动一个简单的HTTP服务器,提供一个要测试的页面
  2. 启动各种不同的浏览器加载这个页面,以确认一切正常工作。

I know #2 works and I have no problem with this.

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

在我的代码中,我是这样做的:
class Test:  
    def setup_class(cls):  
        ready_signal = threading.Event()  
        cls.port = 9000  
        cls.docroot = /tmp  
        cls.http_wrapper = SimpleHTTPWrap(port=cls.port, docroot=cls.docroot, ready_signal)  
        background_thread = threading.Thread(target=http_wrapper.start)  
        background_thread.daemon = True  
        background_thread.start()  
        ready_signal.wait(10) # Wait for thread to be ready (or proceed after timeout)  
    def test(self):  
        ip = get_my_ip_address()  
        self.browser = webdriver.Remote(_some_parameters_go_here)  
        self.browser.get('http://' + ip + ":" + cls.port + cls.docroot + '/test.html')  
        # This hangs after similar tests have already run and succeeded  
    def teardown_class(cls):  
        cls.http_wrapper.stop()    
class SimpleHTTPWrap(object):  
    def __init__(self, port, docroot, ready_signal):  
        self.port = port  
        self.docroot = docroot  
        self.request_handler = SimpleHTTPServer.SimpleHTTPRequestHandler  
        self.server = None  
        self.ready_signal = ready_signal  
    def start(self):  
        os.chdir(self.docroot)  
        try:  
            log.info("Attempting to bind to port: " + str(self.port))  
            self.server = SocketServer.TCPServer(("", self.port), self.request_handler)  
            self.server.allow_reuse_address = True  
            log.info("Success.")  
            self.ready_signal.set() # Signal the main thread that we're ready  
            self.server.serve_forever()  
        except socket.error:  
            log.error("Could not bind to address (port already in use)" + str(self.port))  

认为它在某种死锁的情况下,因为当我尝试调用cls.http_wrapper.server.shutdown()它只是挂起。

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

有没有人碰巧知道是什么原因导致了这个问题,或者我能做些什么来进一步调查?在这一点上,我不知所措,考虑只是尝试其他的东西。

当我获得外部连接并且服务器具有打开页面的浏览器时,就会发生这种情况。当我关闭页面时,外部客户端可以完美地连接。

我有一个非常简单的HTTP服务器,但我使用

处理服务
with http.server.HTTPServer(("0.0.0.0", PORT), myHandler) as server:
   print("Running on port", PORT)
   server.serve_forever()

我知道这个问题很老,但我希望这能帮助到一些人。

相关内容

  • 没有找到相关文章

最新更新