重用python加载模块

时间:2017-10-29 21:36:11

标签: python python-import

是否可以重用已经加载到内存中的python模块?

我们说我有脚本loader.pyconsume.py。我尝试做下一件事 - 调用loader.py并在consume.py中重复使用它。第一个脚本应该加载到内存大文件中,第二个脚本将被多次调用并使用大文件。

我能实现吗?我不熟悉python,但我想,应该有办法在内存中访问加载的模块(脚本)。

我目前的实施尝试如下:

loader.py

   x = 3
   print 'module loaded'

consume.py

  from loader import x 
  print x

更新

我尝试使用importlib,因为它描述为herehere,但我的加载程序模块每次都会加载。下面是我的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多次调用使用脚本,而不是每次都加载大文件。需要在脚本执行之间共享数据

1 个答案:

答案 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)

设置这样的设置比依靠导入机制运行代码提供了更多的灵活性,这不是它的设计目的。

基于您的更新的附录:您正在制造比他们需要的更难的东西。你真的,真的不需要在普通代码中使用importlibglobals()。这些是构建库的工具,而不是数据分析。