Class 请求之间共享的静态属性值

Class static attribute value shared between requests

我有一个静态 class 属性,它在同一个 http 请求中得到 mod 化。

class A:
  x = {}

  def fun(k,v):
    A.x[k] = v

我的问题是,当您执行另一个 http 请求时,上一个请求的最后一个值仍然存在。

我正在通过 Apache 的 mod WSGI 使用 Django。

如何使静态值在同一个请求中持续存在,而不是在另一个请求中持续存在?

在每次请求结束时,清除缓存

@app.teardown_request
def teardown(exc):
    A.x = {}

静态变量的全部意义在于让它们持久存在 class 而不是用于处理特定请求的实例。这在使用线程器或基于事件的服务器时很危险,因为静态变量不仅会与下一个请求共享,还会与并行处理的所有请求共享。

我假设 class A 这是一个基于 class 的视图。在这种情况下,您可以将属性改为实例一:

class A(…):
    def __init__(self, *args, **kwargs):
        super()
        self.x = {}

    def foo(k, v):
        self.x[k] = v

由于基于 class 的视图会针对它们服务的每个请求重新实例化,因此该值不会渗入其他请求。

受 muddyfish 的回答启发,我实现了一个中间件 process_response

import A

class ClearStaticMiddleware(object):
  def process_response(self, request, response):
    A.x = {}
    return response

谢谢大家的回复。