You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:48:54