python - 在python中访问内存堆
问题描述
有没有办法在 Python 中访问内存堆?我对能够访问在运行实例的内存中分配的所有对象感兴趣。
解决方案
您无法直接访问,但该gc
模块应该可以完成您想要的大部分操作。一个简单的gc.get_objects()
调用将返回收集器跟踪的所有对象。这不是全部,因为 CPython 垃圾收集器只关心潜在的引用循环(因此不能引用其他对象的内置类型,例如int
, float
,str
等)不会出现在结果list
中,但是它们'都将被其中的某些东西引用list
(如果不是,它们的引用计数将为零并且它们将被处理掉)。
除此之外,您可能会从模块中获得一些更有针对性的用途,inspect
尤其是堆栈框架检查,使用模块进行“轻松格式化”或手动挖掘半文档框架对象本身,其中任何一个都可以让您缩小范围范围缩小到堆栈帧上的特定活动范围。traceback
对于最接近堆的解决方案,您可以使用模块tracemalloc
来跟踪和记录分配发生时,或者使用pdb
调试器从外部进行实时自省(可能添加对代码的breakpoint()
调用以使其在到达该点时自动停止让你环顾四周)。
推荐阅读
- android - 用于 NFC 的 Android 的 ForegroundDispatch
- c - 写入 PGM 映像
- python - 我在 Django 休息框架 APIView 类中得到位置参数为空。为什么?以及如何将价值传递给它?
- suitescript2.0 - 在 SuiteScript 2.0 中设置销售订单项目的税码
- java - JsonPath 忽略输出中的调试日志
- r - R:错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败
- r - 将弹性表导出为 word 时如何解决 read_docx 的错误
- r - `colnames<-`(`*tmp*`, value = seq(ncol(tmp_val))) 中的错误:
- ios - 为什么 Xcode 会比 Instruments for SceneKit 应用程序显示更多的内存使用?
- c# - RSA Crypto:第一次生成后是否需要存储密钥对