En mi módulo, tengo un par de funciones que dependen de un módulo externo con un tiempo de inicio prolongado. ¿Cómo uso LazyLoader ? Si tengo
import veggieso
import veggies.brussels.sproutso
from veggies.brussels import sprouts ¿Cómo reemplazaría esas declaraciones para usar LazyLoader de modo que la ejecución del contenido del módulo se posponga hasta que sea necesario?
No es inmediatamente obvio a partir de la documentación cómo usarlo. No hay ningún ejemplo, y la búsqueda de código anulado solo aparece con la prueba unitaria incluida con Python.
El problema original tiene un código que parece una importación completa perezosamente:
Los siguientes archivos importan dos módulos de forma perezosa:
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() Para probar, usé lo siguiente en myown.py .
print("Executed myown.") def test(): print("OK")Eso funcionó muy bien (Python 3.8a0).