根据来源,必须从与服务器运行的线程不同的线程调用 BaseServer.shutdown()。
但是,我正在尝试使用在 Web 请求中提供给服务器的特定值来关闭服务器。
请求处理程序显然在这个线程中运行,所以在我这样做之后它仍然会死锁:
httpd = BaseHTTPServer.HTTPServer(('', 80), MyHandler)
print("Starting server in thread")
threading.Thread(target=httpd.serve_forever).start()
我怎样才能完成我想要的?我必须设置一个套接字或管道或其他东西(请告诉我如何做到这一点,如果它是解决方案),主线程可以阻塞并等待子线程发送消息,此时它将能够调用shutdown()?
我目前能够通过从请求处理程序调用“httpd.socket.close()”来实现某种“工作”行为。这会产生一个[Errno 9] Bad file descriptor
错误,并且似乎终止了 Windows 上的进程。
但这显然不是解决此问题的正确方法。
更新约。2013 年 8 月我与 node.js 私奔来满足强大的异步 I/O 的需求,但大量的副项目(例如线性代数研究、各种命令行工具前端)让我回到了 python。回顾这个问题,BaseHTTPServer 与其他选项(如 Phil 提到的各种微框架)相比,可能没有什么实用价值。