Closed
Description
Leak 2 (old leak)
This version seems to leak as far back as 5.2.0, maybe earlier
leak happens when updating a
CIMultiDict
from adict
orCIMultiDict
EDIT: I have not found a version that doesn't leak that I can still compile
import os import gc import psutil import ctypes from multidict import CIMultiDict def trim_memory() -> int: gc.collect() # libc = ctypes.CDLL("libc.so.6") # return libc.malloc_trim(0) def get_memory_usage(): process = psutil.Process(os.getpid()) memory_info = process.memory_info() return memory_info.rss / (1024 * 1024) def main(): for _ in range(10_000): for _ in range(1000): result = CIMultiDict() headers = {f"X-Any-{i}": str(i) for i in range(1000)} result.update(headers) del result del headers trim_memory() print(f"Memory usage: {get_memory_usage():.2f} MB") if __name__ == "__main__": main()% python3.9 leak2.py multidict version: 6.3.2 Memory usage: 37.47 MB Memory usage: 61.06 MB Memory usage: 84.12 MB
% python3.9 leak2.py multidict version: 6.0.0 Memory usage: 36.91 MB Memory usage: 60.98 MB Memory usage: 84.89 MB Memory usage: 108.28 MB Memory usage: 131.38 MB