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()

Reference

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...