为什么数据在请求之间仍然存在?

时间:2019-08-15 10:06:53

标签: python-2.7 flask gunicorn

垃圾收集不起作用?数据似乎可以通过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 = []

但是我想正确地了解正在发生的事情。

1 个答案:

答案 0 :(得分:1)

如果您将Web服务器上的代码加载到内存中并持续运行,那么“示例”列表不断增长就不足为奇了。

如果您希望重新开始,那么我认为有几种方法可以做到这一点: 1)确保在每次调用Web服务器时都运行并正确退出“错误”代码。 2)如果您希望在Web服务器上连续运行“错误”代码,那么也许可以实现类似于“示例”处理的队列,即,您不仅可以添加所需数据,还可以使已完成处理的数据出队,并留下一个列表空的。您可以通过多种方式来实现这一目标,例如实现以下方法:

example.clear()

example *= 0

del example[:]

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