【发布时间】:2014-06-15 07:35:53
【问题描述】:
我有以下代码用于在端口 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()
但偶尔当stop_server 返回时,侦听套接字仍会打开。我通过将os.system("netstat -ln | grep 8000") 放在stop_server 的末尾验证了这一点,它通常表明套接字仍在侦听。
有没有办法只在套接字关闭后从stop_server 返回?
【问题讨论】:
-
在 socket.shutdown() 之前尝试一次 socket.close() 看看是否有变化。
-
这是正确的方法吗?我目前没有直接访问套接字,只是使用
HTTPServer类。 -
也许这会给你一些提示stackoverflow.com/a/20746459/2382792
-
pss:不,不是同一个问题。
-
我不确定,但只是尝试在 self.server.shutdown 之前添加这个 self.server.close() 你也可以将导入放在你的代码中并更新你的问题,它有助于工作迅速地。 :)
标签: python sockets httpserver