Memory leak when calling certain python packages from Julia via PythonCall
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Ambito
- performance
Direzione di ricerca
Inizia eseguendo l'MWE fornito di PythonCall e matplotlib con le versioni indicate di Julia, Python e dei package, quindi confronta il suo comportamento in termini di memoria con il ciclo numpy. Indaga sul motivo per cui chiudere ed eliminare la figura e gli assi non libera memoria; il lavoro è completato quando il ciclo ripetuto non cresce più indefinitamente e il comportamento è verificato nella REPL e nello script da riga di comando.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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!
- Lingua principale
- Julia
- Stelle
- 1.1k
- Fork
- 89
- Merge medio
- 2g 15h
- PR unite (30g)
- 7
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di JuliaPy/PythonCall.jl
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
JuliaPy/PythonCall.jl#828 · 7 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
JuliaPy/PythonCall.jl#809 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Locking julia dependenciesApertaenhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
JuliaPy/PythonCall.jl#805 · 4 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
JuliaPy/PythonCall.jl#796 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
JuliaPy/PythonCall.jl#790 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di JuliaPy/PythonCall.jl
Issue simili
-
broken links in docsAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaPhysics/BeamletOptics.jl#127 ·
I maintainer di solito rispondono entro 1 giorno
-
Chains resumed from `initial_state` take `num_warmup + 1` warm-up stepsForse già presa @thevolatilebit l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
TuringLang/AbstractMCMC.jl#220 ·
-
found-by-agent
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
exanauts/SparseDirectSolver.jl#92 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno