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

Python多线程中如何跨类访问其他类动态变化的实例变量

问题场景

需要实现的效果:类A持续修改自身实例变量self.tt时,类B的check()方法可实时打印、读取、使用这个动态变化的self.tt值。
当前问题代码:

class A:
    def __init__(self):
        self.tt = 0

    def change_tt(self):
        for i in range(100000000):
            self.tt += 1
            sleep(1)


class B():
    def __init__(self):
        self.x = A.tt

    def check(self):
        while True:
            print(self.x)


a = A()
b = B()

x1 = threading.Thread(target=A.change_tt)
x2 = threading.Thread(target=B.check)

x1.start()
x2.start()

运行代码抛出错误:

AttributeError: type object 'A' has no attribute 'tt'
错误原因
  • tt是类A的实例属性,仅在A实例化后的对象上存在,直接通过类本身A.tt访问必然找不到属性,触发报错。
  • 线程启动时传入的target参数错误:A.change_tt、B.check都是类层面的未绑定方法,没有绑定到创建的实例a、b上,就算解决属性访问问题,运行时也会因为缺少self参数抛出异常。
  • 逻辑设计错误:就算正确拿到tt的初始值赋值给self.x,整数是值类型,赋值操作是值拷贝,后续A实例修改tt不会影响B里存的初始值,无法实现动态读取的效果。
可行实现方案

最直接的实现方式是让B实例持有A实例的引用,每次读取值时直接访问A实例上的实时tt属性,同时修正线程的绑定方式,代码如下:

import threading
from time import sleep

class A:
    def __init__(self):
        self.tt = 0

    def change_tt(self):
        for i in range(100000000):
            self.tt += 1
            sleep(1)


class B():
    def __init__(self, a_instance):
        # 持有A实例的引用,而非拷贝tt的初始值
        self.a_ref = a_instance

    def check(self):
        while True:
            # 每次访问直接读取A实例上的最新tt值
            print(self.a_ref.tt)
            sleep(0.5) # 增加轮询间隔,避免占满CPU


if __name__ == "__main__":
    a = A()
    # 将已实例化的A对象传入B
    b = B(a)

    # 线程绑定实例方法,设置为守护线程避免程序无法退出
    x1 = threading.Thread(target=a.change_tt, daemon=True)
    x2 = threading.Thread(target=b.check, daemon=True)

    x1.start()
    x2.start()
    # 阻塞主线程维持子线程运行
    while True:
        sleep(1)
优化建议
  • 高并发场景下建议给tt的读写加线程锁:可以在A类初始化时创建self.lock = threading.Lock(),修改tt时用with self.lock包裹,读取时按需加锁,避免多线程竞争导致的值异常。
  • 轮询方式资源占用较高,如果对实时性要求高、业务逻辑复杂,可以改用观察者模式:A类维护一个订阅者列表,tt值变化时主动推送最新值给所有订阅的B实例,不需要B一直循环查询。
  • 轮询间隔需要根据业务场景合理设置,不要无休眠死循环打印/读取,否则会占满单个CPU核心,造成不必要的资源浪费。

内容的提问来源于stack exchange,提问作者tung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:54:17