Since the common case here should be a straight get, I wonder if it would be faster to use an if or a try/except rather than constructing a new fetching_queue each time. Not a blocker, just a thought. I've run into situations profiling Zope's adapter resolution machinery in which allocation of new objects turned out to be the heaviest thing.