What is a good way to find all of the references to an object in python?

我问的原因是看起来我们有一个"内存泄漏".我们正在从Web浏览器将图像文件上传到服务器.每次我们这样做时,服务器上的内存使用量都会与刚刚上载的文件大小成比例增加.Python垃圾回收永远不会释放此内存,因此我认为可能存在指向图像数据的零散引用,即使在每个请求结束时也不会删除或超出范围.

我想,如果能够问python:"哪些引用仍然指向这个内存?"这样我就能找出是什么阻止垃圾收集释放它.

目前,我们在Heroku服务器上运行Python和Django.

推荐答案

Python的标准库有gc个包含垃圾收集器API的模块.你可能想要的功能之一是

gc.get_objects()

此函数返回垃圾回收器当前跟踪的所有对象的列表.下一步是对其进行分析.

如果您知道要跟踪的对象,可以使用sys模块的getrefcount功能:

>>> x = object()
>>> sys.getrefcount(x)
2
>>> y = x
>>> sys.getrefcount(x)
3

Django相关问答推荐

通过Model Form以编程方式设置Date TimeRangeField

升级到4.2时,获取默认文件存储/存储是互斥的

如何在Django模板中为无效词典查找打开异常?

如何在Django REST框架中管理序列化程序?

Django:如何 Select 没有其他项目引用的项目?

如何从基于类的视图将用户保存在 django 模型中

如何使用具有某些权限的 Django 组的转储数据和加载数据?

Django 转储数据将附加数据添加到 json 导出

如何在 django 中修改现有模型实例?

如何使用 matplotlib 在绘图的角落插入小图像?

JSP模板继承

Django 从 url 保存图像并与 ImageField 连接

根据模型属性获取django对象id

获取 Django 中的缓存键列表

related_name 参数在 Django 模型中没有按预期工作?

django admin 排序外键字段列表

如何仅在某些情况下禁用 Django 的 csrf 保护?

get_or_create() 是否必须立即保存?

django sql 查询如何使用不区分大小写的同时包含?

Django 在 css 文件中使用背景图像的方法