Python3.6中threading.local()在Thread类内无法正常使用的问题
问题分析与解决
这个报错的核心原因是threading.local()的工作机制:它会为每个线程维护完全独立的存储空间。你在__init__方法里给self.local.test赋值时,这段代码是在主线程中执行的,而线程的run方法是在新启动的子线程中运行的——子线程的threading.local()对象和主线程的是两个完全独立的实例,自然找不到test属性。
修正方案
把对local属性的赋值逻辑移到run方法里,确保赋值和访问操作都在同一个子线程中进行:
import threading class Test(threading.Thread): def __init__(self): super().__init__() self.local = threading.local() def run(self): # 在子线程内初始化线程本地属性 self.local.test = 123 print(self.local.test) # 启动线程 t = Test() t.start()
额外说明
如果需要在多个方法中共享线程本地状态,只要保证所有对local属性的读写操作都在子线程执行的方法(比如run或者被run调用的方法)里完成即可。绝对不要在主线程执行的__init__里给local赋值——因为那只会把数据存在主线程的本地存储里,子线程根本访问不到。
内容的提问来源于stack exchange,提问作者lssbq
相关产品推荐
相关产品推荐

