[Python-Dev] Python startup optimization: script vs. service (original) (raw)

Christian Heimes christian at python.org
Mon Oct 2 10:59:08 EDT 2017


On 2017-10-02 15:26, Victor Stinner wrote:

2017-10-02 13:10 GMT+02:00 INADA Naoki <songofacandy at gmail.com>:

https://github.com/python/cpython/pull/3796 In this PR, lazy loading only happens when uuid1 is used. But uuid1 is very uncommon for nowdays. Antoine Pitrou added a new C extension uuid which is imported as soon as uuid(.py) is imported. On Linux at least, the main "overhead" is still done on "import uuid". But Antoine change optimized a lot "import uuid" import time!

https://github.com/python/cpython/pull/3757 In this PR, singledispatch is lazy loading types and weakref. But singledispatch is used as decorator. So if web application uses singledispatch, it's loaded before preforking. While "import module" is fast, maybe we should use sometimes a global variable to cache the import. module = None def func(): global module if module is None: import module ... I'm not sure that it's possible to write an helper for such pattern.

I would rather like to see a function in importlib that handles deferred imports:

modulename = importlib.deferred_import('modulename')

def deferred_import(name): if name in sys.modules: # special case 'None' here return sys.modules[name] else: return ModuleProxy(name)

ModuleProxy is a module type subclass that loads the module on demand.

Christian



More information about the Python-Dev mailing list