【发布时间】:2012-06-11 19:07:04
【问题描述】:
作为应用程序运行的一部分,我从远程数据库创建字典。这个过程是相当繁重的 I/O,所以我决定创建这个字典的“单例”实例,并在我的应用程序中根据需要调用它。
代码看起来像(Dictionaries.py):
state_code_dict = None
def get_state_code_dict():
global state_code_dict
if state_code_dict == None:
state_code_dict = generate_state_code_dict()
return state_code_dict
然后我在需要的地方导入并调用get_state_code_dict() 函数。我添加了一个打印语句来检查state_code_dict 是否正在被重新初始化或重用,我发现它正在被重用(这是我想要的功能)。为什么state_code_dict 的实例在应用程序运行中仍然存在?
编辑
我在多个文件中导入了get_state_code_dict 函数。
【问题讨论】:
-
因为导入的代码只在第一次执行?
-
编辑澄清:我在多个位置导入代码(多个文件包括
get_state_code_dict函数。 -
默认情况下,导入解释器已经加载的代码不会重新加载该代码。可以故意重新加载一个模块,但如果你必须这样做,而不是因为模块的实际代码可能在运行时发生了变化,你应该使用不同的编程习惯来做你想做的事情。跨度>
-
而这种行为正是可取的,因为模块初始化有时是重量级的。