[Python-Dev] Python startup optimization: script vs. service
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