使用 python 的 BaseHTTPRequestHandler 保持 HTTP 请求之间的状态

use*_*847 5 python http

我有一个从 BaseHTTPRequestHandler 派生的 HTTP 处理程序

class MyHandler(BaseHTTPRequestHandler):
    do_GET():
        ...
Run Code Online (Sandbox Code Playgroud)

我一直遇到的问题是我想报告在另一个线程中运行的应用程序的状态。似乎对于每个请求都会调用一个新的处理程序实例,因此我无法将程序状态保留在 MyHandler 中。我可以在全球范围内存储状态,但出于设计原因我不想这样做。还有其他选择吗?

Mat*_*ttK 3

您可以使用多处理模块来完成此任务。首先派生一个服务器类:

class MyTCPServer(SocketServer.ForkingTCPServer):
    manager = multiprocessing.Manager()
    SHARED = manager.dict()
Run Code Online (Sandbox Code Playgroud)

然后在处理程序的 do_GET 中,您可以执行以下操作:

self.server.SHARED['foo'] = 1
Run Code Online (Sandbox Code Playgroud)

然后应该可以由 do_GET 的其他实例引用。