如何在Python中获取当前CPU和RAM使用情况?

507 投票
21 回答
700023 浏览
提问于 2025-04-11 20:27

我怎么能在Python中获取当前系统状态(比如当前的CPU使用率、内存、可用磁盘空间等)呢?理想情况下,这个方法应该能在Unix和Windows平台上都能用。

根据我的搜索,似乎有几种可能的方法可以做到这一点:

  1. 可以使用一些库,比如PSI(不过这个库现在似乎没有在积极开发,而且不支持多个平台)或者像pystatgrab这样的库(同样,自2007年以来就没有更新过,而且不支持Windows)。

  2. 可以使用特定平台的代码,比如在*nix系统中用os.popen("ps"),而在Windows平台上用MEMORYSTATUSctypes.windll.kernel32(可以参考ActiveState上的这个示例)。你可以把这些代码片段整理成一个Python类。

这些方法并不是不好,但有没有一种已经得到良好支持的、跨平台的方法可以实现同样的功能呢?

21 个回答

75

我们可以通过结合使用 tqdmpsutil 来实时监控 CPU 和内存的使用情况。这在进行大量计算或处理时会非常有用。

cli cpu and ram usage progress bars

而且,这个方法在 Jupyter 中也能直接使用,不需要任何代码修改:

Jupyter cpu and ram usage progress bars

from tqdm import tqdm
from time import sleep
import psutil

with tqdm(total=100, desc='cpu%', position=1) as cpubar, tqdm(total=100, desc='ram%', position=0) as rambar:
    while True:
        rambar.n=psutil.virtual_memory().percent
        cpubar.n=psutil.cpu_percent()
        rambar.refresh()
        cpubar.refresh()
        sleep(0.5)

把这些进度条放在单独的进程中使用 multiprocessing 库会很方便。

这段代码片段也可以在这里找到:gist

100

可以使用 psutil库。在Ubuntu 18.04上,截止到2019年1月30日,pip安装的版本是5.5.0(最新版本)。旧版本的表现可能会有些不同。

你可以通过在Python中运行以下代码来检查你安装的psutil版本:

from __future__ import print_function  # for Python2
import psutil
print(psutil.__versi‌​on__)

如果你想获取一些内存和CPU的统计信息,可以使用以下代码:

from __future__ import print_function
import psutil
print(psutil.cpu_percent())
print(psutil.virtual_memory())  # physical memory usage
print('memory % used:', psutil.virtual_memory()[2])

其中,virtual_memory(一个元组)会显示系统整体的内存使用百分比。在我使用的Ubuntu 18.04上,这个值似乎高估了几个百分点。

你还可以获取当前Python实例使用的内存:

import os
import psutil
pid = os.getpid()
python_process = psutil.Process(pid)
memoryUse = python_process.memory_info()[0]/2.**30  # memory use in GB...I think
print('memory use:', memoryUse)

这段代码会告诉你当前Python脚本的内存使用情况。

如果你想要更深入的示例,可以查看 psutil的pypi页面

608

psutil库可以让你获取关于CPU、内存等信息,适用于多种平台:

psutil是一个模块,它提供了一种接口,可以用Python来获取正在运行的进程和系统使用情况(比如CPU和内存)的信息。这种方式是可移植的,意思是你可以在不同的操作系统上使用它。它实现了很多工具(比如ps、top和Windows任务管理器)提供的功能。

目前,它支持Linux、Windows、OSX、Sun Solaris、FreeBSD、OpenBSD和NetBSD,支持32位和64位架构,适用于Python版本从2.6到3.5(使用Python 2.4和2.5的用户可以使用2.1.3版本)。


一些示例:

#!/usr/bin/env python
import psutil
# gives a single float value
psutil.cpu_percent()
# gives an object with many fields
psutil.virtual_memory()
# you can convert that object to a dictionary 
dict(psutil.virtual_memory()._asdict())
# you can have the percentage of used RAM
psutil.virtual_memory().percent
79.2
# you can calculate percentage of available memory
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
20.8

这里还有其他文档,提供了更多概念和有趣的内容:

撰写回答