ger*_*rit 8 python python-module python-import python-importlib
在我的模块中,我有几个依赖于具有较长启动时间的外部模块的功能.我该怎么用LazyLoader?如果我有
import veggies
Run Code Online (Sandbox Code Playgroud)
要么
import veggies.brussels.sprouts
Run Code Online (Sandbox Code Playgroud)
要么
from veggies.brussels import sprouts
Run Code Online (Sandbox Code Playgroud)
如何替换这些语句以便LazyLoader模块内容的执行被推迟到需要时?
从文档中可以立即明白如何使用它.没有示例,并且nullege代码搜索仅提供Python本身包含的单元测试.
Pet*_*ter 13
在原来的问题有一些代码,似乎以全进口懒洋洋地:
以下文件延迟导入两个模块:
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()
Run Code Online (Sandbox Code Playgroud)
为了测试,我在myown.py.
print("Executed myown.")
def test():
print("OK")
Run Code Online (Sandbox Code Playgroud)
效果很好(Python 3.8a0)。