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

Python中如何跨模块导入更新后的中间变量与全局变量?

问题分析与解决方案

一、模块内函数变量无法跨模块获取更新值的问题

你在module1.py里的问题核心是函数内的变量是局部变量,和模块级的同名变量并非同一对象。即便你在模块顶部初始化了intermediate_variable = None,函数里未声明global时,赋值操作只会创建一个新的局部变量,不会修改模块级的那个变量,因此其他模块导入后只能拿到初始的None。

修正后的module1.py:

intermediate_variable = None

def calculate():
    global intermediate_variable
    # 执行计算逻辑
    intermediate_variable = 42
    # 无限循环示例
    while True:
        pass

在module2.py中获取更新后的值:

import module1
import threading

# 启动calculate线程避免主线程阻塞
threading.Thread(target=module1.calculate, daemon=True).start()

# 等待变量更新(可根据实际场景调整等待逻辑)
while module1.intermediate_variable is None:
    pass

print(module1.intermediate_variable)  # 输出42

二、Deephaven执行上下文dh_exec_ctx跨模块导入的问题

你的实际场景中,问题有两点:

  1. run_deephaven()仅在模块作为主程序运行时(if __name__ == '__main__')才会执行,其他模块导入时该函数不会自动运行,导致dh_exec_ctx始终为None。
  2. 即便手动启动线程执行run_deephaven(),线程执行需要时间,直接获取可能还未完成赋值,需要同步机制等待。

修正后的Deephaven模块代码(示例命名为deephaven_setup.py):

from threading import Thread, Condition
from deephaven_server import Server

dh_exec_ctx = None
cv = Condition() 

def run_deephaven():
    global dh_exec_ctx
    server = Server()
    server.start()
    from deephaven.execution_context import get_exec_ctx
    with cv:
        dh_exec_ctx = get_exec_ctx()
        cv.notify_all()  # 通知等待的线程变量已更新

# 若需模块导入时自动启动,可移除下面的if判断;若需手动控制则保留
if __name__ == '__main__':
    run_deephaven()

在其他模块中导入并获取dh_exec_ctx:

import deephaven_setup
import threading

# 启动Deephaven服务线程
threading.Thread(target=deephaven_setup.run_deephaven, daemon=True).start()

# 等待dh_exec_ctx完成赋值
with deephaven_setup.cv:
    deephaven_setup.cv.wait_for(lambda: deephaven_setup.dh_exec_ctx is not None)

# 此时可正常使用dh_exec_ctx
print(deephaven_setup.dh_exec_ctx)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:33