Python中能否给threading.Thread实例自定义ID、Name等属性?
实现方案
基于类的规范实现(推荐)
通过继承threading.Thread自定义线程类,可统一扩展自定义ID、名称属性,保留原生线程所有能力,符合你需要的类实现要求:
import threading import time import os # 自定义线程类 class CustomThread(threading.Thread): def __init__(self, custom_id, custom_name, *args, **kwargs): # 调用父类初始化,透传target、args等原生参数 super().__init__(*args, **kwargs) # 自定义属性 self.ID = custom_id self.Name = custom_name FLTXT = open('TXT Files/file.txt', 'w') name, extension = os.path.splitext("") print(extension) def thread_function(textToWrite): FLTXT.write(f"{str(textToWrite)}\n") if __name__ == "__main__": threadsList = list() # 创建自定义线程实例,传入自定义ID、名称,以及原有参数 x = CustomThread(custom_id=1234, custom_name="ThreadName", target=thread_function, args=("Hola",)) xx = CustomThread(custom_id=5678, custom_name="SecondThread", target=thread_function, args=("hi",)) threadsList.append(x) threadsList.append(xx) # 可直接读取你需要的属性 print(x.ID) # 输出 1234 print(x.Name) # 输出 ThreadName x.start() xx.start() for index, thread in enumerate(threadsList): thread.join() # 记得关闭文件,避免内容丢失 FLTXT.close()
你需要的x.ID = 1234、x.Name = ThreadName赋值效果可以直接实现,也支持后续修改属性值:
x.ID = 9999 x.Name = "ModifiedThreadName"
简易动态赋值方案
如果不想单独定义类,Python支持直接给原生线程实例动态追加属性,不需要修改原有代码结构:
x = threading.Thread(target=thread_function, args=("Hola",)) # 直接追加自定义属性 x.ID = 1234 x.Name = "ThreadName"
该方案写法简单,但适合临时使用,项目级开发更推荐自定义类的方式,属性定义更统一可维护。
补充优化建议
原有代码中文件打开后未主动关闭,可能出现缓冲内容未写入磁盘的问题,建议使用with上下文管理器自动管理文件生命周期,不需要手动调用close()。
内容的提问来源于stack exchange,提问作者Austin Charbonneau
相关产品推荐
相关产品推荐

