如何解决删除/重置列表或双端队列? 内存泄漏问题其他方法
我正面临内存泄漏,它发生在线程中。我的代码结构如下:
while True:
with self._lock:
if self.valid_data:
# do something
内存泄漏
如何完全删除列表。
我的解决方案self.__data.clear()
self.__data = []
问题
如何在python中为列表和双端队列数据结构非常有效地清除内存?
在这里,3个使用者线程使用该数据,并且一个重置线程根据某个标志清除该线程。
del self.__data
还是其他方式?
这种情况很少发生,这使我难以重现,所以我只是认为最好的代码可以解决问题。请告知。
其他方法
- Delete an object and all references to it in Python? 我需要用于列表或双端队列的简单API。
解决方法
清除,重新分配和删除几乎是相同的。他们将花费大部分时间删除引用,并希望删除其包含的对象。
也就是说,假设没有其他引用这些对象。如果还有另一个对列表或双端队列的引用,则除删除引用计数之一外,赋值和删除均不执行任何操作。在这种情况下,您必须执行del mylist[:]
或mydeque.clear()
。如果所包含的对象在其他地方被引用,它们也不会真正被删除。
尽管通常会立即删除对象,但是如果它们具有循环引用(a.b = b
和b.a = a
),则垃圾收集器需要运行以收集它们。它在后台是自动的,但是在进行大型删除以清除内存后立即调用gc.collect()
是合理的。然后,您还可以检查len(gc.garbage)
,其中包含永远不会被收集的死对象。大于0的数字有点不好,但在数字变大之前基本上是无害的。然后,您必须弄清楚代码为何创建死对象(硬)。
但是转储列表正确吗?这对程序输出的有效性意味着什么?当您发现问题时,最好引发异常并运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。