如何使用 importlib.LazyLoader?
How do I use importlib.LazyLoader?
在我的模块中,我有几个函数依赖于启动时间较长的外部模块。如何使用 LazyLoader
?如果我有
import veggies
或
import veggies.brussels.sprouts
或
from veggies.brussels import sprouts
我将如何替换这些语句以使用 LazyLoader
以便将模块内容的执行推迟到需要时?
从文档中无法立即看出如何使用它。没有示例,nullege code search 仅提出 Python 本身包含的单元测试。
original issue 有一些代码似乎懒惰地完全导入:
以下文件延迟导入两个模块:
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)。
在我的模块中,我有几个函数依赖于启动时间较长的外部模块。如何使用 LazyLoader
?如果我有
import veggies
或
import veggies.brussels.sprouts
或
from veggies.brussels import sprouts
我将如何替换这些语句以使用 LazyLoader
以便将模块内容的执行推迟到需要时?
从文档中无法立即看出如何使用它。没有示例,nullege code search 仅提出 Python 本身包含的单元测试。
original issue 有一些代码似乎懒惰地完全导入:
以下文件延迟导入两个模块:
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)。