我将函数作为线程调用,这些线程包含大量数据,我想在它们完成后立即释放它们使用的内存。这是我使用的一般格式:
t = thread.start()
threads.append(t)
for thread in threads:
thread.join()
现在,线程仍由thread
变量引用。这是否意味着它内部的所有变量都将被保留?
为了释放这些线程使用的内存,我需要做些什么特别的事情吗?
例如,
del variable_referencing_data
答案 0 :(得分:2)
在Python中,由于Python Garbage Collector,你通常不需要担心释放内存。有关详细信息,请参阅this SO question。
答案 1 :(得分:1)
您所谓的变量实际上是名称,这是一种引用对象的方法。
函数的内容是Python中的块。块中的赋值将名称绑定到对象。此绑定的范围是块。
因此,只要函数退出,块的本地名称与它们引用的对象之间的绑定就会丢失。如果这些对象没有其他名称引用它们,它们将被垃圾收集。
这基本上是为什么作为规则你不应该担心内存管理; Python会为您解决这个问题。
尝试加载比计算机物理甚至虚拟内存大得多的数据集是此规则的一个例外。在这种情况下,您需要重新考虑您的策略。