首页 > Python资料 博客日记
Pyglet 内存泄漏 & 页面错误 以及(可能)有用的解决方法
2024-06-24 18:30:03Python资料围观173次
这篇文章介绍了Pyglet 内存泄漏 & 页面错误 以及(可能)有用的解决方法,分享给大家做个参考,收藏Python资料网收获更多编程知识
Charapter 1: 端倪
最近一直在用Pyglet做一个小的案例,但是实际运行起来时发现了严重的内存泄漏。经调查后发现平均每秒会爆出80-120不等的页面错误。且可以观察到内存正在不断地以0.2-0.4mb不等的速度增长。
能够复原此问题的代码如下:
# 导入库
import pyglet
win = pyglet.window.Window()
# 注册函数
@win.event('on_draw')
def Draw():
# 绘制一个白色的正方形
pyglet.shapes.Rectangle(0, 0, 100, 100, color = (255, 255, 255, 255)).draw()
# 使程序运行
pyglet.app.run()
在程序启动后,能够明显发现内存在不断增加。如下图:
(第二空为pid,第三空为提交内存,第四空和第五空分别为页面错误总数和页面错误增量)
Charapter 2: 调试
后来,在查阅一些资料后,发现了Pyglet存在"双缓冲区机制"(这个机制给我的感觉就是可有可无,还请大佬在评论区赐教),试图去掉双缓冲区后代码如下:
# 导入库
import pyglet
win = pyglet.window.Window(config = pyglet.gl.Config(double_buffer = False)) # 去掉双缓冲
# 注册函数
@win.event('on_draw')
def Draw():
# 绘制一个白色的正方形
pyglet.shapes.Rectangle(0, 0, 100, 100, color = (255, 255, 255, 255)).draw()
# 使程序运行
pyglet.app.run()
(第一张和第三张为正常使用时的图片,第二张为突发帧,相较之前错误少了一半)
看上去像是好一点了。
Charapter 3: 削除
仍然会有泄露的问题。观察了下gc,发现字典,元组和函数的数量在不断增加。而一个最简单的示例里就没有这些问题。我想了好一阵,两个示例里最大的差别就是,在之前的示例中,on_draw()
函数执行了在窗口上绘制了白色正方形的任务。所以,问题有没有可能出在正方形上呢?
将示例中的正方形删掉之后,错误立即减少了许多。一直降至0-1。问题修复了。由此可知:函数内不能创建Pyglet的任何图形对象。
之后,尝试在函数外就先创建一个正方形,果然没有了问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 【python】Matplotlib库安装教程
- Python 青铜宝剑十六维,破医疗数智化难关(上)
- 【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
- Python 条件语句详解 if - elif-else
- C语言&Python&Bash:空白(空格、水平制表符、换行符)与转义字符
- 计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习
- Python | 基于支持向量机(SVM)的图像分类案例
- 如何在Python中安装GDAL库(gdal)
- 轨迹优化 | 基于贝塞尔曲线的无约束路径平滑与粗轨迹生成(附ROS C++/Python仿真)
- Python大数据可视化:基于大数据技术的共享单车数据分析与辅助管理系统_flask+hadoop+spider
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程