垃圾收集不起作用?数据似乎可以通过Flask / Gunicorn / Python在浏览器请求中持久保存。
如果我连续向托管以下代码的Web服务器发出请求,则输出将增加-它以[“ 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,其行为将是向Web服务器发送的每个请求返回的单个项目数组。我意识到我可以通过使用以下方法来避免该问题:
def __init__(self)
self.example = []
但是我想正确地了解正在发生的事情。
答案 0 :(得分:1)
如果您将Web服务器上的代码加载到内存中并持续运行,那么“示例”列表不断增长就不足为奇了。
如果您希望重新开始,那么我认为有几种方法可以做到这一点: 1)确保在每次调用Web服务器时都运行并正确退出“错误”代码。 2)如果您希望在Web服务器上连续运行“错误”代码,那么也许可以实现类似于“示例”处理的队列,即,您不仅可以添加所需数据,还可以使已完成处理的数据出队,并留下一个列表空的。您可以通过多种方式来实现这一目标,例如实现以下方法:
example.clear()
example *= 0
del example[:]
或更复杂的使用Python集合https://docs.python.org/2/library/collections.html#collections.deque的方法,将元素出队。