ITADN

Memory leak when calling certain python packages from Julia via PythonCall

#759OpenYesse42 创建于 2026-04-18
bug
Y
Yesse42commented
Affects: PythonCall Describe the bug Memory is not released when repeatedly creating and closing matplotlib figures via PythonCall. I originally had the issue with an elaborate cartopy plotting loop, but have managed to recreate it in a simple while true loop MWE. Each iteration allocates a new figure/axes via plt.subplots, immediately closes it with plt.close, calls PythonCall.pydel! on both the figure and axes objects, and calls GC.gc(). However, there is still a leak until the process is killed. This does not occur when repeatedly allocating and deleting a numpy array in an equivalent loop, so the issue has something to do with what kind of python objects are created. I also have similar memory leak issues with scikit-learn. The issue is reproducable both in the Julia REPL and in the VS Code Julia extension, and when I execute a script containing the below code from the command line. MWE: using PythonCall @py import matplotlib.pyplot as plt i = 0 while true global i += 1 fig, ax = plt.subplots(1, 1) plt.close(fig) PythonCall.pydel!(ax) PythonCall.pydel!(fig) GC.gc() println("Iteration $i done") end My system OS: macOS 15.7.4 (arm64, Apple Silicon) Julia: 1.12.6 Python: 3.14.2 (conda-forge, Clang 20.1.8) PythonCall: 0.9.31 matplotlib: 3.10.8 Thanks for your help!
0 条评论