Delete/Reset 列表或双端队列?

Delete/Reset a list or deque?

我面临内存泄漏,它发生在线程中。我的代码结构是这样的

while True:
    with self._lock:
        if self.valid_data: 
            # do something

内存泄漏

如何彻底删除列表。

我的解决方案
self.__data.clear()
self.__data = []

问题

如何在python中非常有效地清除列表和双端队列数据结构的内存? 在这里,3 个消费者线程使用数据,一个重置线程根据一些标志清除线程。 del self.__data 或任何其他方式?

这种情况很少发生,这让我很难重现,所以我只是认为最好的代码可以解决这个问题。请指教

其他方法

清除、重新分配和删除都差不多。他们将花费大部分时间删除引用并希望删除其包含的对象。

也就是说,假设没有其他引用这些对象。如果有另一个对列表或双端队列的引用,赋值和删除除了删除其中一个引用计数外不会做任何事情。在这种情况下,您必须执行 del mylist[:]mydeque.clear()。如果包含的对象在其他地方被引用,它们也不会真正被删除。

虽然对象通常会被立即删除,但如果它们有循环引用(a.b = bb.a = a),垃圾收集器需要 运行 收集它们。它在后台是自动的,但是在一个旨在清除内存的大删除之后立即调用 gc.collect() 是合理的。然后,您还可以检查 len(gc.garbage),其中包含永远不会被收集的死对象。任何超过 0 的值都有点不好,但在数字变大之前基本上是无害的。然后你必须弄清楚为什么你的代码会创建死对象(困难)。

但是丢弃列表是正确的做法吗?这对程序输出的有效性意味着什么?当您检测到问题时,引发异常和 运行.

可能会更好