[Python-Dev] Proposal: thread.get_dict
Jim Fulton
jim at zope.com
Wed Jun 30 06:16:32 EDT 2004
Jim Fulton wrote:
> Armin Rigo wrote:
>
...
> I have to say that I *really* like your suggestion of the thread.local
> object. I'm not sure the elegance isn't worth the extra dictionary lookup.
> Actually, for most apps, the elegance is more than worth the extra
> dictionary
> lookup. I'm gonna do some more investigation of this to see if I can
> estimate
> the impact of the extra lookup on what I'm doing.
OK, I spent some quality time with gprof yesterday. I was able to prove to myself
that C dict lookups (e.g. PyDict_GetItem) are so fast that the extra dict lookup
isn't worth worrying about. (On my slow laptop, a lookup from a small dict took
about 80 nanoseconds.) I was being silly about the extra dict lookup cost.
Your local object is the way to go.
I'll also note that that I can use a slightly different implementation than the
one you suggested and gain back much of the (tiny) cost of the extra lookup.
It happens that lookup on non-string keys is much more expensive than lookup of
string keys. For small dictionaries (gprof experiments show that) using an
object key is more than 40% slower than using a string key. Tim tells me that
the difference will be more stark for a larger dictionary with collisions.
With the local object, the local-object implementation can control the key used.
Rather than using itself as the key for looking up its data dictionary, it can
use a string of it's address. This provides the safety of using an object
key, but gets the speed benefit of using a string key.
I'll send an updated proposal here later today.
Thanks for the great suggestion!
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Python-Dev
mailing list