除了进行外部系统调用以获取有关当前进程的内存使用情况的信息外,没有内置的方法可以做到这一点,例如直接在 Linux 中读取当前进程的/proc/meminfo。
如果您对标准库中的仅 Unix 解决方案感到满意,该解决方案只能返回 使用的峰值 resident memory,那么您正在寻找 resource.getrusage(resource.RUSAGE_SELF).ru_maxrss。
此函数返回一个对象,该对象描述当前进程或其子进程消耗的资源...
>>> resource.getrusage(resource.RUSAGE_SELF)
resource.struct_rusage(ru_utime=0.058433,
ru_stime=0.021911999999999997, ru_maxrss=7600, ru_ixrss=0,
ru_idrss=0, ru_isrss=0, ru_minflt=2445, ru_majflt=1, ru_nswap=0,
ru_inblock=256, ru_oublock=0, ru_msgsnd=0, ru_msgrcv=0, ru_nsignals=0,
ru_nvcsw=148, ru_nivcsw=176)
这无法告诉您在调用之间分配了多少内存,但它可能有助于跟踪应用程序生命周期内使用的峰值内存的增长情况。
一些用 C 语言编写的 Python 分析器已被开发为直接与 CPython 交互,这些分析器能够检索有关使用的总内存的信息。一个例子是Heapy,它还具有绘图功能。
如果您只想在新对象添加到堆栈时跟踪它们消耗的内存,您始终可以在每个新对象上使用sys.getsizeof() 来取回已分配的运行总空间。