有没有办法让 Python 程序确定它当前使用了多少内存?我见过关于单个对象的内存使用情况的讨论,但我需要的是该进程的总内存使用情况,这样我就可以确定何时需要开始丢弃缓存的数据。
是的,有方法可以确定 Python 进程的总内存使用量。以下是获取内存使用量的几种常用方法:
psutil
该psutil库提供了一种获取系统和进程信息(包括内存使用情况)的简便方法。
首先,如果尚未安装该库,请安装它:
pip install psutil
然后,您可以使用它来获取内存使用情况:
import psutil # Get the current process process = psutil.Process() # Get the memory usage in bytes memory_usage = process.memory_info().rss print(f"Memory usage: {memory_usage / (1024 * 1024):.2f} MB")
resource
该resource模块可用于获取 Unix 系统上的内存使用情况。以下是示例:
import resource # Get the memory usage in bytes memory_usage = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss # Note: ru_maxrss is in kilobytes on Unix systems print(f"Memory usage: {memory_usage / 1024:.2f} MB")
os
ps
您可以使用os模块调用外部命令,例如ps获取内存使用情况。此方法更特定于平台,并且可能在不同环境中不一致地工作。
import os # Get the process ID pid = os.getpid() # Use ps to get the memory usage in kilobytes memory_usage = int(os.popen(f'ps -p {pid} -o rss=').read().strip()) print(f"Memory usage: {memory_usage / 1024:.2f} MB")
tracemalloc
该tracemalloc模块用于跟踪 Python 中的内存分配,虽然它不提供有关总内存使用情况的直接信息,但它可以帮助您监控内存分配。
import tracemalloc # Start tracing memory allocations tracemalloc.start() # ... your code ... # Get the current memory usage current, peak = tracemalloc.get_traced_memory() print(f"Current memory usage: {current / (1024 * 1024):.2f} MB") print(f"Peak memory usage: {peak / (1024 * 1024):.2f} MB") # Stop tracing memory allocations tracemalloc.stop()
在这些方法中,使用psutil库是获取 Python 进程总内存使用量最直接、跨平台的方法。模块resource和os模块与ps命令更特定于平台,可能在某些类 Unix 环境中有用。模块tracemalloc可用于跟踪 Python 程序中的内存分配。