是否可以重用已经加载到内存中的python模块?
我们说我有脚本loader.py
和consume.py
。我尝试做下一件事 - 调用loader.py
并在consume.py
中重复使用它。第一个脚本应该加载到内存大文件中,第二个脚本将被多次调用并使用大文件。
我能实现吗?我不熟悉python,但我想,应该有办法在内存中访问加载的模块(脚本)。
我目前的实施尝试如下:
loader.py
x = 3
print 'module loaded'
consume.py
from loader import x
print x
更新
我尝试使用importlib
,因为它描述为here和here,但我的加载程序模块每次都会加载。下面是我的cosume.py
import importlib
module = importlib.import_module('loader')
globals().update(
{n: getattr(module, n) for n in module.__all__} if hasattr(module, '__all__')
else
{k: v for (k, v) in module.__dict__.items() if not k.startswith('_')
})
print(x)
最终目标
从nodejs多次调用使用脚本,而不是每次都加载大文件。需要在脚本执行之间共享数据
答案 0 :(得分:1)
在consume.py
中定义一项功能,完成您想要完成的工作。事实上,它应该都是功能。您可以有三个文件,一个用于定义加载数据的函数,一个用于定义使用数据的函数,另一个用于将它们组合到某个过程中。
例如,一个模块加载数据:
# loader.py
def load_data():
# load the data
您编写使用数据的函数的一个模块:
# consume.py
def consume_data(data):
# do stuff with the data
def consume_data_differently(data):
# do other stuff with the data
以及实际执行操作的脚本:
# do_stuff.py
from loader import load_data
from consume import consume_data
data = load_data()
for d in data: # consume pieces of data in a loop
consume_data(d)
设置这样的设置比依靠导入机制运行代码提供了更多的灵活性,这不是它的设计目的。
基于您的更新的附录:您正在制造比他们需要的更难的东西。你真的,真的不需要在普通代码中使用importlib
和globals()
。这些是构建库的工具,而不是数据分析。