HTTPServer.shutdown 返回但套接字仍然打开

Dan*_*bbs 2 python sockets httpserver

我有以下代码,用于在端口 8000 上运行本地 HTTP 服务器:

# Omitted imports and irrelevant things for brevity.

class ThreadedHTTPServer(SocketServer.ThreadingMixIn, HTTPServer):
    pass

class MyClass(object):

    server = None

    def start_server(self):
        handler = MyPageHandler
        self.server = ThreadedHTTPServer(('', 8000), handler)

        server_thread = threading.Thread(target=self.server.serve_forever)
        server_thread.daemon = False
        server_thread.start()

    def stop_server(self):
        self.server.shutdown()
Run Code Online (Sandbox Code Playgroud)

然而,有时当stop_server返回时,监听套接字仍然会打开。我已经通过将其放在os.system("netstat -ln | grep 8000")末尾来验证这一点stop_server,并且它经常显示套接字仍在侦听。

有没有办法只stop_server在套接字关闭后返回?

Dan*_*bbs 5

看起来这个问题是通过添加server.server_close()@\xcf\x81ss 建议解决的:

\n\n
def stop_server(self):\n    self.server.shutdown()\n    self.server.server_close()\n
Run Code Online (Sandbox Code Playgroud)\n