Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 38d17e3

Browse files
committed
Speed-up cache updates
1 parent ccb90e3 commit 38d17e3

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

Lib/collections.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,19 @@ def __eq__(self, other):
161161
def __del__(self):
162162
self.clear() # eliminate cyclical references
163163

164+
def _move_to_end(self, key, PREV=0, NEXT=1):
165+
'Fast version of self[key]=self.pop(key). Private method for internal use.'
166+
link = self.__map[key]
167+
link_prev = link[PREV]
168+
link_next = link[NEXT]
169+
link_prev[NEXT] = link_next
170+
link_next[PREV] = link_prev
171+
root = self.__root
172+
last = root[PREV]
173+
link[PREV] = last
174+
link[NEXT] = root
175+
last[NEXT] = root[PREV] = link
176+
164177

165178
################################################################################
166179
### namedtuple

Lib/functools.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ def wrapper(*args, **kwds):
139139
try:
140140
with lock:
141141
result = cache[key]
142-
del cache[key]
143-
cache[key] = result # record recent use of this key
142+
cache._move_to_end(key) # record recent use of this key
144143
wrapper.hits += 1
145144
except KeyError:
146145
result = user_function(*args, **kwds)

0 commit comments

Comments
 (0)