为什么数据会跨请求持续存在?

Why does data persist across requests?

垃圾收集不起作用?数据似乎在 Flask/Gunicorn/Python.

的浏览器请求中持续存在

如果我连续向托管以下代码的网络服务器发出请求,输出会增加 - 它以 ["test"] 开头,然后是 ["test"、"test"] 等等.任何人都可以解释 Python 垃圾收集允许这样做的方式吗?我希望对网络服务器的每个请求都创建一个 class Bad 的新实例,并且每个新实例都以 example 作为空列表开始。

@app.route('/bad')
def bad():
    b = Bad()
    b.append("test")
    return b.output()


class Bad:
    example = []

    def append(self, data):
        self.example.append(data)

    def output(self):
        return str(self.example)

我是 Python 的新手,来自 PHP,其中的行为是针对网络服务器的每个请求返回的单个项目数组。我意识到我可以通过使用来避免这个问题:

def __init__(self)
    self.example = []

但我想正确理解发生了什么。

如果您在网络服务器上的代码被加载到内存中并不断 运行ning 那么 "example" 列表不断增长就不足为奇了。

如果您想重新开始,那么在我看来,您可以通过以下几种方式来做到这一点: 1) 确保无论何时调用网络服务器,您 运行 并正确退出 "Bad" 代码。 2) 如果你希望在网络服务器上连续 运行 "Bad" 编码,那么也许你可以像处理 "example" 一样实现一个队列,即你不仅可以追加想要的数据,还可以将你想要的数据出列' 完成处理,留下一个空列表。您可以通过多种方式实现这一点,例如实现以下方法:

example.clear()

example *= 0

del example[:]

或使用 Python 集合 https://docs.python.org/2/library/collections.html#collections.deque 的更复杂方法,使元素出队。