Message308980
Currently, functools.lru_cache implement own doubly-linked list.
But it is inefficient than OrderedDict because each link node is GC object.
So it may eat more memory and take longer GC time.
I added two private C API for OrderedDict and make lru_cache use it.
* _PyODict_LRUGetItem(): Similar to PyDict_GetItemWithHash() + od.move_to_end(last=True).
* _PyODict_PopItem(): Similar to odict.popitem().
Why I didn't implement C version of move_to_end() is to reduce lookup.
_PyODict_LRUGetItem(key) lookup key once while
od[key]; od.move_to_end(key) lookup key twice.
I'll benchmark it and report result here. |
|
Date |
User |
Action |
Args |
2017-12-24 05:19:02 | methane | set | recipients:
+ methane |
2017-12-24 05:19:02 | methane | set | messageid: <1514092742.06.0.213398074469.issue32422@psf.upfronthosting.co.za> |
2017-12-24 05:19:02 | methane | link | issue32422 messages |
2017-12-24 05:19:01 | methane | create | |
|