A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2001-October/017682.html below:

[Python-Dev] xmlrpclib speed boost

[Python-Dev] xmlrpclib speed boostSkip Montanaro skip@pobox.com (Skip Montanaro)
Mon, 1 Oct 2001 13:56:58 -0500
    >> This change may be deemed not to be the correct fix as far backwards
    >> compatibility is concerned (it uses the "from m import x as y"
    >> feature which was new with 2.0 I think).  If someone alters this fix,
    >> please don't put the import back into the functions that call
    >> cgi.escape.

    Thomas> Why not ? Moving the import to the top level just causes the
    Thomas> slowdown to occur at a different moment. If this is really the
    Thomas> problem, the slowdown should occur only the first time you use a
    Thomas> particular function (unless you explicitly un-import cgi somehow
    Thomas> ?)

Trust me, this really *is* the problem.  Instead of getting imported once,
it gets imported once for every string and once for every key in every
dictionary.  I timed it before and after.  Compare Marshaller.dump_string
before

    def dump_string(self, value):
        from cgi import escape
        self.write("<value><string>%s</string></value>\n" % escape(value))

and after

    def dump_string(self, value):
        self.write("<value><string>%s</string></value>\n" % _escape(value))

I don't care how little work it is to import a module a second time, it is
probably going to be on the same order of magnitude as that write call.  In
Marshaller.dump_struct the import was *inside* the for loop.  I originally
pulled it up out of the for loop but left it inside the method.  That got me
about a 25% boost in my simple test.  I was ready to check in that one
change and thought, "aw hell, might as well see what happens if I pull the
import all the way out to the top level".  Dump performance went all the way
back up to where 0.9.8 is.

    Thomas> Importing cgi only in the functions that actually use it, in
    Thomas> order to avoid the slowdown unless it's really necessary, sure
    Thomas> seems like a sensible solution to me :-)

Except dumping structs (dictionaries) and strings happens a lot.  Even if
all we ever did was dump ints, floats and lists, the total cost of my change
would be one import.

Skip



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4