20

在我的模块中,我有几个函数依赖于一个启动时间很长的外部模块。我该如何使用LazyLoader?如果我有

import veggies

或者

import veggies.brussels.sprouts

或者

from veggies.brussels import sprouts

我将如何替换这些语句以LazyLoader将模块内容的执行推迟到需要时使用?

从文档中如何使用它并不是很明显。没有示例,并且nullege 代码搜索仅提供 Python 本身包含的单元测试。

4

1 回答 1

16

原始问题有一些代码似乎懒惰地完全导入:

以下文件懒惰地导入两个模块:

import sys
import importlib.util

def lazy(fullname):
  try:
    return sys.modules[fullname]
  except KeyError:
    spec = importlib.util.find_spec(fullname)
    module = importlib.util.module_from_spec(spec)
    loader = importlib.util.LazyLoader(spec.loader)
    # Make module with proper locking and get it inserted into sys.modules.
    loader.exec_module(module)
    return module

os = lazy("os")
myown = lazy("myown")

print(os.name)
myown.test()

为了测试,我在myown.py.

print("Executed myown.")
def test():
  print("OK")

效果很好(Python 3.8a0)。

于 2018-07-01T20:22:19.023 回答