微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除/重置列表或双端队列? 内存泄漏问题其他方法

如何解决删除/重置列表或双端队列? 内存泄漏问题其他方法

我正面临内存泄漏,它发生在线程中。我的代码结构如下:

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的数字有点不好,但在数字变大之前基本上是无害的。然后,您必须弄清楚代码为何创建死对象(硬)。

但是转储列表正确吗?这对程序输出的有效性意味着什么?当您发现问题时,最好引发异常并运行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。