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

Python多线程跨线程共享变量修改后输出异常问题咨询

问题根因

代码存在两处核心错误,导致变量无法按预期修改:

  • 线程目标参数传参错误:创建Thread实例时写target=cfg.global_cfg(),会在主线程上下文立刻执行global_cfg函数,最终把函数返回值None传给target参数。子线程启动后没有可执行的逻辑,根本不会运行你写的变量修改代码。正确传参需要传入函数对象本身,不能加函数调用的圆括号。
  • 全局变量作用域不统一:两个文件中的account是完全独立的模块级变量:main.py中定义的account属于__main__模块的全局变量,cfg.py中用global account声明操作的是cfg模块自身的全局变量,二者指向完全不同的内存地址,cfg里的修改根本不会影响main里定义的变量。
修正代码

把跨线程共享的变量统一定义在独立模块中,所有线程都从该模块导入、操作变量,同时修正线程传参写法:
cfg.py(存储共享变量+修改逻辑)

# 共享变量统一定义在cfg模块
account = 1

def global_cfg():
    global account
    account = 2

main.py(启动线程、读取变量)

import threading
import cfg
import time

if __name__ == "__main__":
    # 传入函数对象,不要加()提前调用
    thread_cfg = threading.Thread(target=cfg.global_cfg, args=())
    thread_cfg.start()
    time.sleep(5)
    # 读取cfg模块中的共享变量
    print(cfg.account)

运行上述代码即可得到预期输出2。

内容的提问来源于stack exchange,提问作者Michael Mü

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:27:21