返回介绍

使用 Psutil

发布于 2025-04-20 18:52:16 字数 3068 浏览 0 评论 0 收藏

Psutil 是一个跨平台的进程处理和系统工具模块,它可以获取系统 CPU、内存、硬盘和网络等信息,常用于系统资源的采集、监控、分析,以及进程管理。使用它可以用 Python 实现系统相关的命令行功能,比如 top、netstat、ps、iostat、ifconfig、df,具体实现可以参考项目代码下的 scripts 目录(http://bit.ly/28SOjEX )。目前使用它的应用有 Psdash、Glances 等。虽然它主要应用于运维开发中,但是在应用代码中也可以使用它增加一些这方面的功能。举两个例子:

  • 启动定时任务时需要确保之前的定时任务都已完成,否则要直接退出或者杀掉这些之前没有完成的进程,再开始。
  • 当应用在内存占用等方面有问题时,加入 Psutil 代码,监控对应内存(或其他指标)的使用情况来帮助确定原因。

我们先安装它:

> pip install psutil

常用的函数有如下 10 个。

1.cpu_percent:返回当前 CPU 的利用率的百分比。

In:psutil.cpu_percent() #它接受两个参数:interval 是统计的间隔,percpu 为
   True 会返回所有逻辑 CPU 的利用率的列表
Out:32.6

2.cpu_count:获得逻辑(物理)CPU 的个数。

In:psutil.cpu_count()
Out:24
In:psutil.cpu_count(logical=False) #获取物理 CPU 数,会去掉超线程 CPU 的数量
Out:2 #数据差别很大

3.virtual_memory:内存占用情况。

In [2]:psutil.virtual_memory()
Out[2]:svmem(total=101540593664L, available=77059371008L, percent=24.1, used
     =89900863488L, free=11639730176L, active=25916870656, inactive=57613012992,
     buffers=6373376L, cached=65413267456)

其中:

  • total 表示全部内存。
  • available 表示可以用来分配的内存。不同系统的计算方式不同,在 Linux 下是 free+buffers+cached。
  • percent 表示使用的内存的占比,也就是(total-available)/total*100。
  • used 表示已经用到的内存。不同系统的计算方式不同。
  • free 表示未被分配的内存。Linux 下不包括 buffers 和 cached。

4.disk_partitions:硬盘分区信息,返回所有挂载的分区的信息的列表。列表中的每一项类似于 df 命令的格式输出,包括分区、挂载点、文件系统格式、挂载参数等。

In:psutil.disk_partitions()
Out:
[sdiskpart(device='/dev/root', mountpoint='/', fstype='xfs', opts='rw,noatime,
    nodiratime,attr2,delaylog,nobarrier,noquota'),
sdiskpart(device='/dev/sda2', mountpoint='/data1', fstype='xfs', opts='rw,
    noatime,nodiratime,nobarrier')]

5.disk_usage:返回硬盘,分区或者目录的使用情况,单位为字节。

In : psutil.disk_usage('/')
Ou : sdiskusage(total=42928640000, used=40646586368, free=2282053632, percent
    =94.7)

6.pids:获得当前运行的程序进程的 id 列表。

In : pids=psutil.pids()

7.pid_exists:检查程序 id 是否存在,可以理解为“pid in psutil.pids()”的快捷方式。

In:psutil.pid_exists(11111)
Out:False
In:psutil.pid_exists(pids[10])
Out:True

8.Process:操作进程的类。

In : p=psutil.Process(pid=pids[100])
In : datetime.datetime.fromtimestamp(p.create_time()).strftime("%Y-%m-%d%H:%M:%S")
Out: '2016-03-06 06:17:04'
In : p.as_dict(attrs=['pid', 'name', 'username'])
Out: {'name':'tail', 'pid':1414, 'username':'dongwm'}

In : p.cpu_percent(interval=1)
Out: 1.0
In :  p.memory_info()
pmem(rss=15491072, vms=84025344, shared=5206016, text=2555904, lib=0, data
    =9891840, dirty=0)
In : p2=psutil.Process() #获取当前进程实例 In:p2
Out: <psutil.Process(pid=341, name='ipython') at 37342416>In:p2.cpu_affinity([5]) #把进程绑到第 6 个 CPU 上
In : p2.open_files()
Out:
[popenfile(path='/home/ubuntu/.ipython/profile_default/history.sqlite', fd=3),
 popenfile(path='/home/ubuntu/.ipython/profile_default/history.sqlite', fd=4)]
In : p2.cmdline()
Out: ['/usr/bin/python2.7', '/home/ubuntu/web_develop/venv/bin/ipython']
In : p2.kill() #杀掉了自己
[1]   341 killed     /home/ubuntu/web_develop/venv/bin/ipython

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。