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

Python中类文件变量无法更新并传递至主文件的求助

解决跨线程更新全局变量不生效的问题

你的代码存在三个关键问题导致变量未更新,以下是对应的修复方案:

1. 修正变量名大小写问题

var_global.py中定义的变量是BarCode1(首字母C大写),但Class_ServerThread.py和Main.py里使用的是Barcode1(首字母c小写)——这是两个完全独立的变量,你修改的是未定义的新变量,自然主文件读不到更新。

统一所有文件的变量名,比如全部使用小写c的Barcode1:

# var_global.py
Barcode1 = ""
Barcode2 = ""
Barcode3 = ""
Barcode4 = ""
Barcode5 = ""
Barcode6 = ""
Barcode7 = ""

2. 让主线程等待子线程完成赋值

子线程启动后,主线程会立刻进入打印循环,此时子线程可能还没执行到赋值语句。可以用join()方法等待子线程完成操作后再读取变量:

# Main.py
import var_global
from Class_ServerThread import SocketServerThread
import GPIO
import time

ss = SocketServerThread()
ss.start()
ss.join()  # 等待子线程完成所有变量赋值

try:
    while True:
        print(var_global.Barcode1)  # 显示100
        print(var_global.Barcode2)  # 显示200
        print(var_global.Barcode3)  # 显示300
        print(var_global.Barcode4)  # 显示400
        print(var_global.Barcode5)  # 显示500
        print(var_global.Barcode6)  # 显示600
        print(var_global.Barcode7)  # 显示700
        time.sleep(1)  # 避免疯狂打印
finally:
    GPIO.cleanup()

3. 修正语法与冗余代码

  • Main.py中的try语句缺少冒号:,这会直接触发语法错误,必须补上。
  • Class_ServerThread.py里的while True循环毫无意义(内部直接break),可以直接删除循环,简化代码:
# Class_ServerThread.py
import var_global
from threading import Thread

class SocketServerThread(Thread):
    def __init__(self):
        super().__init__()  # 替代旧写法Thread.__init__(self)

    def run(self):
        var_global.Barcode1 = '100'
        var_global.Barcode2 = '200'
        var_global.Barcode3 = '300'
        var_global.Barcode4 = '400'
        var_global.Barcode5 = '500'
        var_global.Barcode6 = '600'
        var_global.Barcode7 = '700'

额外优化建议

如果有大量全局变量,用字典或类管理会比单独变量更清晰,避免大小写和维护问题:

# var_global.py
barcodes = {
    "Barcode1": "",
    "Barcode2": "",
    "Barcode3": "",
    "Barcode4": "",
    "Barcode5": "",
    "Barcode6": "",
    "Barcode7": ""
}

子线程中修改:

var_global.barcodes["Barcode1"] = '100'

主文件中读取:

print(var_global.barcodes["Barcode1"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:20:27