Consequences of importing the same module multiple times in C++?

Lie Ryan lie.1296 at gmail.com
Sat Oct 25 18:24:48 EDT 2008


On Fri, 24 Oct 2008 12:23:18 -0700, Robert Dailey wrote:

> Hi,
> 
> I'm currently using boost::python::import() to import Python modules, so
> I'm not sure exactly which Python API function it is calling to import
> these files. I posted to the Boost.Python mailing list with this
> question and they said I'd probably get a better answer here, so here it
> goes...
> 
> If I do the following:
> 
> using namespace boost::python;
> import( "__main__" ).attr( "new_global" ) = 40.0f; import( "__main__"
> ).attr( "another_global" ) = 100.0f:
> 
> Notice that I'm importing twice. What would be the performance
> consequences of this? Do both import operations query the disk for the
> module and load it into memory? Will the second call simply reference a
> cached version of the module loaded at the first import() call?
> 
> Thanks.

I think it does not reload the module. Running python with verbose mode:

blah at blah-laptop:~$ python -v
(snip)
>>> import xml
import xml # directory /usr/local/lib/python2.6/xml
# /usr/local/lib/python2.6/xml/__init__.pyc matches /usr/local/lib/
python2.6/xml/__init__.py
import xml # precompiled from /usr/local/lib/python2.6/xml/__init__.pyc
>>> import xml
>>> 

It's also mentioned in the docs: (paraphrased to clarify the points)
'''
The system maintains a table of modules that have been ... 
initialized.... When a module name is found..., step (1) is finished. If 
not, a search for a module ... . When ... found, it is loaded.
'''
http://www.python.org/doc/2.5.2/ref/import.html




More information about the Python-list mailing list