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
或任何其他方式?
这种情况很少发生,这让我很难重现,所以我只是认为最好的代码可以解决这个问题。请指教
其他方法
- 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 的值都有点不好,但在数字变大之前基本上是无害的。然后你必须弄清楚为什么你的代码会创建死对象(困难)。
但是丢弃列表是正确的做法吗?这对程序输出的有效性意味着什么?当您检测到问题时,引发异常和 运行.
可能会更好
我面临内存泄漏,它发生在线程中。我的代码结构是这样的
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 的值都有点不好,但在数字变大之前基本上是无害的。然后你必须弄清楚为什么你的代码会创建死对象(困难)。
但是丢弃列表是正确的做法吗?这对程序输出的有效性意味着什么?当您检测到问题时,引发异常和 运行.
可能会更好