Python字典没有跨不同文件更新



我有两个文件

  1. runner.py- main
import secondthread
my_dict = {}
def action1():
my_dict["i"] = 2
if __name__ == "__main__":
action1()
secondthread.action2()
  1. secondthread.py
import runner
def action2():
try:
print("Thread2: dict value is = {}".format(runner.my_dict["i"]))
except Exception as e:
print("Thread2: dict haven't got updated value, len of dict is: {}".format(len(runner.my_dict)))

我不确定为什么尽管顺序运行action1然后action2不更新字典与新的键值对。

我已经尝试将my_dict设置为secondthread.py中的全局变量,它不起作用。我明白,也许循环依赖(runner.py依赖于secondthread.pysecondthread.py依赖于runner.py可能有问题,但我不确定如何从secondthread.py中读取my_dict)。

Update1:我也试过在secondthread.py内,仍然导致相同的错误。

from runner import my_dict

这个方法不是已经从全局命名空间检索my_dict了吗?

我认为问题的关键在于由于循环导入,runner第二次被导入。导入模块将导致其代码运行,因此my_dict将再次初始化,这是您不想要的。依赖于模块导入顺序或频率的代码是有问题的。

解决此类问题的推荐方法是将变量初始化移到单个模块中,然后从每个文件导入一次:https://docs.python.org/3/faq/programming.html#how-do-i-share-global-variables-across-modules在您的示例中,您将创建第三个文件,例如init_vars.py,并从runner.pysecondthread.py中导入它。

相关内容

  • 没有找到相关文章

最新更新