小能豆

Python 进程使用的总内存是多少?

javascript

有没有办法让 Python 程序确定它当前使用了多少内存?我见过关于单个对象的内存使用情况的讨论,但我需要的是该进程的总内存使用情况,这样我就可以确定何时需要开始丢弃缓存的数据。


阅读 43

收藏
2024-07-02

共1个答案

小能豆

是的,有方法可以确定 Python 进程的总内存使用量。以下是获取内存使用量的几种常用方法:

1. 使用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")

2. 使用resource模块(仅限 Unix)

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")

3. 使用osps命令(类Unix系统)

您可以使用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")

4. 使用tracemalloc跟踪内存分配(Python 3.4+)

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 进程总内存使用量最直接、跨平台的方法。模块resourceos模块与ps命令更特定于平台,可能在某些类 Unix 环境中有用。模块tracemalloc可用于跟踪 Python 程序中的内存分配。

2024-07-02