Memory leak when calling certain python packages from Julia via PythonCall
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 领域
- performance
调研方向
首先,使用列出的 Julia、Python 和 package 版本运行所提供的 PythonCall 和 matplotlib MWE,然后将其内存行为与 numpy 循环进行比较。调查为何关闭并删除 figure 和 axes 后内存仍未释放;当重复循环不再无限增长,并且已在 REPL 和命令行脚本中验证该行为时,即视为完成。
由索引模型根据 Issue 内容生成。
描述
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!
- 主要语言
- Julia
- 星标
- 1.1k
- 派生
- 89
- 平均合并
- 23 小时 52 分钟
- 30 天内合并 PR
- 4
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
JuliaPy/PythonCall.jl 的其他 Issue
-
难度 3/5 1-2 天 新手友好度 55/100
JuliaPy/PythonCall.jl#828 · 7 条评论 ·
维护者通常 1 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 48/100
JuliaPy/PythonCall.jl#809 · 2 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 35/100
JuliaPy/PythonCall.jl#805 · 4 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 3/5 1-2 天 新手友好度 68/100
JuliaPy/PythonCall.jl#796 ·
维护者通常 1 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 25/100
JuliaPy/PythonCall.jl#790 ·
维护者通常 1 天内回复
查看 JuliaPy/PythonCall.jl 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
JuliaGPU/KernelAbstractions.jl#897 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
oscar-system/GAP.jl#1455 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 65/100
JuliaAI/MLJTransforms.jl#85 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
SciML/OrdinaryDiffEq.jl#4875 ·
维护者通常 4 天内回复