FAQ
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.

Search Discussions

  • Lie Ryan at Oct 25, 2008 at 10:24 pm

    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
  • Aaron Brady at Oct 25, 2008 at 11:04 pm

    On Oct 24, 2:23?pm, 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.
    Docs:

    Note
    For efficiency reasons, each module is only imported once per
    interpreter session. Therefore, if you change your modules, you must
    restart the interpreter ? or, if it?s just one module you want to test
    interactively, use reload(), e.g. reload(modulename).

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedOct 24, '08 at 7:23p
activeOct 25, '08 at 11:04p
posts3
users3
websitepython.org

People

Translate

site design / logo © 2022 Grokbase