[Python-Dev] C extension import time (original) (raw)
Antoine Pitrou solipsis at pitrou.net
Fri Oct 11 14:51:56 CEST 2013
- Previous message: [Python-Dev] C extension import time
- Next message: [Python-Dev] C extension import time
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Le Fri, 11 Oct 2013 14:24:29 +0200, Stefan Krah <stefan at bytereef.org> a écrit :
Hi,
recently there has been some talk about reducing import times. It seems that the current import strategy for C extensions (i.e. importing the extension at the bottom of the .py file) is quite slow:
==================== import sys for i in range(10000): import decimal del sys.modules('decimal') del sys.modules('decimal') ====================
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. Note that find_loader() can have varying performance:
$ touch empty.py
$ ./python -m timeit -s "modname='empty'; import importlib"
"importlib.find_loader(modname)"
10000 loops, best of 3: 24.4 usec per loop
When trying to improve import performance, I noticed that merely diagnosing the bottlenecks is not always easy.
Regards
Antoine.
- Previous message: [Python-Dev] C extension import time
- Next message: [Python-Dev] C extension import time
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]