Open
Description
Bug report
Bug description:
import random
import time
from threading import Lock, Thread
import psutil
class Cache:
def __init__(self, cap):
self.m = {}
self.mu = Lock()
self.cap = cap
def get(self, key):
with self.mu:
try:
v = self.m[key]
except KeyError:
return 0, False
return v, True
def set(self, key, value):
with self.mu:
self.m[key] = value
if len(self.m) > self.cap:
self.m.popitem()
def set_key(cache):
c = 0
while True:
key = random.randint(0, 1000000000)
cache.set(key, key)
c += 1
if c == 100000:
c = 0
print(".", end="", flush=True)
def run():
cache = Cache(500000)
for _ in range(4):
thread = Thread(target=set_key, args=[cache])
thread.start()
process = psutil.Process()
while True:
time.sleep(10)
with cache.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
Metadata
Metadata
Assignees
Labels
(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)Performance or resource usagePerformance or resource usageAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error