Memory leak with pyplot
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
Piste de recherche
Commencez avec le MWE Julia fourni et les appels PyCall à pyplot, en comparant l’utilisation de la mémoire avec et sans création de graphiques et collecte des déchets. Suivez les objets fig et plot renvoyés à travers PyCall ; le travail est terminé lorsque les références conservées sont identifiées et corrigées, de sorte que le tracé répété ne provoque plus de croissance illimitée de la mémoire.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
When I create matplotlib.pyplot plots, the memory keeps increasing and is not released by the garbage collector. The following is the case I'm interested in (with subplots) and bellow I include a more basic MWE.
Example with subplots
using PyCall
plt = pyimport("matplotlib.pyplot")
function test_pyplot()
for i in 1:10000
@info i
z = rand(4, 50)
ẑ = rand(4, 50)
fig, axs = plot_pyplot(z, ẑ)
end
end
function plot_pyplot(z, ẑ)
# plt = pyimport("matplotlib.pyplot")
N = Int(size(z, 1)/2)
fig, axs = plt.subplots(2, N)
for i in 1:N
axs[1,i].plot(z[i,:], label = "true")
axs[1,i].plot(ẑ[i,:], label = "model")
axs[2,i].plot(z[i+N,:], label = "true")
axs[2,i].plot(ẑ[i+N,:], label = "predicted")
axs[2,i].set_xlabel("time steps")
axs[i].grid(true)
axs[i+N].grid(true)
axs[i+N].label_outer()
axs[i].label_outer()
end
# plt.close()
return fig, axs
end
test_pyplot()
I tried defining plt and closing it inside the plot_pyplot function (commented lines) but it doesn't solve the memory leak.
Here you have a simpler MWE:
using PyCall
plt = pyimport("matplotlib.pyplot")
plot_pyplot(z) = plt.plot(z)
function test_pyplot()
for i in 1:1000000
@info i
z = rand(50)
fig = plot_pyplot(z)
end
end
Version info and status
julia> versioninfo()
Julia Version 1.8.2
Commit 36034abf260 (2022-09-29 15:21 UTC)
Platform Info:
OS: macOS (arm64-apple-darwin21.3.0)
CPU: 8 × Apple M1 Pro
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-13.0.1 (ORCJIT, apple-m1)
Threads: 1 on 6 virtual cores
(memory_leak) pkg> st
Status `~/Documents/issues/memory_leak/Project.toml`
[438e738f] PyCall v1.94.1
I need to use pyplot directly from PyCall.jl and not through PyPlot.jl because I need to pass the fig object to Wandb.jl. Actually, maybe I could get that object from PyPlot.jl, I didn't try that yet. But since I found the bug here, I think it can be helpful to report it anyway.
- Langage dominant
- Julia
- Étoiles
- 1.5k
- Forks
- 186
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de JuliaPy/PyCall.jl
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
-
Meta-Issue: Mutli-threading leads to segfaultsPeut-être pris @topolarity l’a pris il y a 211 jours. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
-
Crashes with Julia 1.12 and Revise.jlPeut-être pris @topolarity l’a pris il y a 211 jours. Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
-
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
Toutes les issues de JuliaPy/PyCall.jl
Issues similaires
-
Chains resumed from `initial_state` take `num_warmup + 1` warm-up stepsPeut-être pris @thevolatilebit l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 80/100
TuringLang/AbstractMCMC.jl#220 ·
-
found-by-agent
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
exanauts/SparseDirectSolver.jl#92 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 90/100
NumericalEarth/Breeze.jl#1051 ·
Les mainteneurs répondent en général sous 1 jour
-
lu_instance/qr_instance run a full factorization for FixedSizeArraysPeut-être pris @devmotion l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
JuliaArrays/ArrayInterface.jl#510 ·