为什么数据会跨请求持续存在?
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 的更复杂方法,使元素出队。
垃圾收集不起作用?数据似乎在 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 的更复杂方法,使元素出队。