我将 python2.6 与 HTTPServer
和 ThreadingMixIn
一起使用,它将在单独的线程中处理每个请求。我还使用 HTTP1.1 持久连接('Connection: keep-alive'),因此服务器或客户端都不会在请求后关闭连接。
请求处理程序大致如下所示
request, client_address = sock.accept()
rfile = request.makefile('rb', rbufsize)
wfile = request.makefile('wb', wbufsize)
global server_stopping
while not server_stopping:
request_line = rfile.readline() # 'GET / HTTP/1.1'
# etc - parse the full request, write to wfile with server response, etc
wfile.close()
rfile.close()
request.close()
问题是,如果我停止服务器,仍然会有一些线程在等待 rfile.readline()
。
我会在 readline()
上方放置一个 select([rfile, closefile], [], [])
并在我想关闭时写入 closefile服务器,但我认为它不适用于 Windows,因为 select
仅适用于套接字。
我的另一个想法是跟踪所有正在运行的请求和 rfile.close()
但我收到 Broken pipe 错误。
想法?
最佳答案
您就快完成了 — 正确的方法是调用 rfile.close()
并捕获损坏的管道错误并在发生这种情况时退出循环。
关于Python:如何关闭具有持久连接的线程化 HTTP 服务器(如何从另一个线程中终止 readline())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1814575/