JuliaPy / JuliaPy/PythonCall.jl

Memory leak when calling certain python packages from Julia via PythonCall

Abierto
#759 0 comentarios 0 reacciones 0 asignados Ver en GitHub
bug
Lenguaje dominante
Julia
Estrellas
1.1k
Forks
86
Merge medio
1 d 22 h
PR fusionados (30 d)
3

Descripción

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!

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Start by running the supplied PythonCall and matplotlib MWE with the listed Julia, Python, and package versions, then compare its memory behavior with the numpy loop. Investigate why closing and deleting the figure and axes does not release memory; done means the repeated loop no longer grows indefinitely and the behavior is verified in the REPL and command-line script.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia, matplotlib, python
Área
performance
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
45/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.