如何解决Python守护程序线程内存泄漏?
如果我在Python(3.6+)中创建了一个守护线程,并且该守护线程已完成执行,它的资源是否会自动释放,还是发生内存泄漏?我环顾四周找不到真正的答案...我以为它已被释放,但偏执狂并希望有人能澄清。
我举了一个基本的例子:
import threading
import time
class Processor():
def get_data_in_thread(self,id):
for i in range(3):
time.sleep(1)
print(f'{id} count: {i}')
#at this point is this thread's resources automatically garbage collected? Or is this a memory leak?
def get_data(self,id):
t = threading.Thread(target=self.get_data_in_thread,args=(id,))
t.daemon = True
t.start()
my_processor = Processor()
my_processor.get_data(17)
time.sleep(30)
当守护程序线程中的工作在get_data_in_thread
中完成时
在该线程中分配的内存是否会自动释放,或者是否可以使用特定命令自行终止自己的守护程序线程?像del()或类似的东西?
谢谢!
解决方法
当线程被破坏时,就像其他对象一样,如果不再引用该线程(refcount变为0),则会立即收集该线程。线程所引用的所有资源也是如此,在您使用的情况下,内部函数变量也是如此,因为它们在其他任何地方都没有引用。
,您必须调用thread.join()
才能将其完全标记为可以进行垃圾收集。
而且,如果要在加入所有内存后立即释放所有内存,请执行gc.collect()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。