Skip to content

Memory keeps increasing with fixed-size dict during multi-threaded set/delete in 3.13.3t #133136

Description

@Yiling-J

Bug report

Bug description:

importrandomimporttimefromthreadingimportLock, ThreadimportpsutilclassCache:
def__init__(self, cap):
self.m= {}
self.mu=Lock()
self.cap=capdefget(self, key):
withself.mu:
try:
v=self.m[key]
exceptKeyError:
return0, Falsereturnv, Truedefset(self, key, value):
withself.mu:
self.m[key] =valueiflen(self.m) >self.cap:
self.m.popitem()
defset_key(cache):
c=0whileTrue:
key=random.randint(0, 1000000000)
cache.set(key, key)
c+=1ifc==100000:
c=0print(".", end="", flush=True)
defrun():
cache=Cache(500000)
for_inrange(4):
thread=Thread(target=set_key, args=[cache])
thread.start()
process=psutil.Process()
whileTrue:
time.sleep(10)
withcache.mu:
print(f"rss: {process.memory_info().rss}, dict len: {len(cache.m)}")
if__name__=="__main__":
run()

Platform: macOS-14.6.1-x86_64-i386-64bit-Mach-O

Python 3.13.3t

uv run --python 3.13.3t mem.py............................................................rss: 384696320, dict len: 500000.......................................................rss: 636743680, dict len: 500000.......................................................rss: 888782848, dict len: 500000.........................................................rss: 1140793344, dict len: 500000......................................................rss: 1392799744, dict len: 500000

Python 3.13.3

uv run --python 3.13.3 mem.py....................................................................................................rss: 159633408, dict len: 500000...............................................................................................................rss: 159813632, dict len: 500000.........................................................................................................rss: 159981568, dict len: 500000...........................................................................................................rss: 160149504, dict len: 500000......................................................................................................rss: 160301056, dict len: 500000

CPython versions tested on:

3.13

Operating systems tested on:

macOS

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions