Antoine Pitrou <solip...@pitrou.net> wrote:
> Try the following:
> 
> $ ./python -m timeit -s "modname='decimal'; import sys" \
>   "__import__(modname); del sys.modules[modname]"
> 1000 loops, best of 3: 2.21 msec per loop
> 
> $ ./python -m timeit -s "modname='_decimal'; import sys" \
>   "__import__(modname); del sys.modules[modname]"
> 10000 loops, best of 3: 112 usec per loop
> 
> 
> Now compare with the time taken to simply find the module loader:
> 
> $ ./python -m timeit -s "modname='_decimal'; import importlib" \
>   "importlib.find_loader(modname)"
> 10000 loops, best of 3: 87.2 usec per loop
> 
> 
> So find_loader() is the bigger contributor here.

I'm getting about the same values as above. I may be misunderstanding
something, but I wanted to reduce the difference between the 2.21 msec
and the 112 usec.


So the first step I tried is something horrible (typing from memory):

try:
    import _decimal
except ImportError:
    <whole of decimal.py here !!!>
else:
    from _decimal import *

That way the 2.21 msec are reduced to 912 usec, but the indentation is
an abomination.


Another radical way would be to have importlib detect that the C version
is present and load it in the first place. For _decimal this should work,
since it's self-contained. For other modules probably not, so there would
need to be some way of distiguishing between modules that are self-contained
and modules that are not.


Stefan Krah


_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to