前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发实践|玩转Python开发工具库psutil

开发实践|玩转Python开发工具库psutil

原创
作者头像
Aion
修改2024-01-26 08:11:38
15600
代码可运行
修改2024-01-26 08:11:38
举报
运行总次数:0
代码可运行

本篇内容介绍了“怎么用Python实现查询CPU和内存”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让我带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

运维最头痛的事情莫过于分配的资源少于需求,会遇到 CPU 负载高、队列堵塞、任务运行时间长、超时以及潜在的崩溃隐患等问题。而分配的资源太多,则造成不必要的资源和财力浪费。

1 psutil介绍和安装

今天给大家介绍的Python库,叫做psutil,直接使用如下命令,安装后使用。在PyPI的官方仓库中,我们可以看到作者以及软件信息,psutil有很多功能,我们先来看下官方提供给我们的信息:

psutil(进程和系统实用程序)是一个跨平台库,用于检索Python中运行的进程和系统利用率(CPU、内存、磁盘、网络、传感器)的信息。它主要用于系统监视、分析和限制进程资源以及管理正在运行的进程。它实现了经典UNIX命令行工具提供的许多功能,如ps、top、iotop、lsof、netstat、ifconfig、free等。psutil当前支持以下平台:

  • Linux
  • Windows
  • macOS
  • FreeBSD, OpenBSD, NetBSD
  • Sun Solaris
  • AIX

1.1 安装psutil第三方库

通过以下命令进行安装:

python -m pip install psutil

代码语言:shell
复制
macbook:~ Aion.Liu$ python -m pip install psutil
Collecting psutil
  Downloading psutil-5.9.2-cp310-cp310-macosx_10_9_x86_64.whl (239 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 239.3/239.3 kB 1.1 MB/s eta 0:00:00
Installing collected packages: psutil
Successfully installed psutil-5.9.2

psutil安装很简单,当我们看到Successfully,便知道已经安装成功了。当前执行的命令行,在Windows上面和MacOS上面都已经测试,测试结果可行,下面就以在MacOS上面演示下。

2 psutil在终端命令中使用

本篇章主要介绍CPU和内存,关于磁盘、网络、传感器,会在后续文章中介介绍,大家也可以直接到官方说明中查阅。

2.1 CPU

以命名元组的形式返回系统CPU时间。每个属性表示CPU在给定模式下花费的秒数。在psutil中,主要使用到的查询方法有

  • 查询CPU逻辑个数:psutil.cpu_count()
  • 查询CPU物理个数,默认logical值为True:psutil.cpu_count(logical=False)
  • 查询CPU的统计状态信息(元组形式返回):psutil.cpu_stats()
    • ctx_switches:上下文切换次数
    • interrupts:中断次数
    • soft_interrupts:软中断次数
    • syscalls:系统调用次数,linux上始终为0
  • 查询CPU频率:psutil.cpu_freq()
  • 查询CPU各个节点执行时间:psutil.cpu_times()
    • user:执行用户进程的时间
    • system:执行内核进程时间
    • idle:闲置的时间
    • nice:在用户模式下执行niced(优先)进程所花费的时间,这个结果因平台不同而不同。
    • 其他返回结果也是因为平台的不同而不同

在命令行代码:

代码语言:shell
复制
>>> # 引入需要用到的第三方包
>>> import psutil
>>> 
>>> psutil.cpu_count()
12
>>> 
>>> psutil.cpu_count(logical=False)
6
>>> 
>>> psutil.cpu_stats()
scpustats(ctx_switches=322385, interrupts=740666, soft_interrupts=525466977, syscalls=1458128)
>>> 
>>> psutil.cpu_freq()
scpufreq(current=2600, min=2600, max=2600)
>>> 
>>> psutil.getloadavg()
(2.9833984375, 2.44775390625, 2.38525390625)
>>> 
>>> psutil.cpu_times()
scputimes(user=25599.2, nice=0.0, system=13772.39, idle=551135.08)

这里只罗列我需要的几个返回结果,其他返回结果的查询方法或者查询方式,请移步到官方提供的文档中找,这里不在赘述。

可运行代码示例:

代码语言:python
代码运行次数:0
复制
import psutil

psutil.cpu_count()
代码语言:python
代码运行次数:0
复制
import psutil

psutil.cpu_count(logical=False)
代码语言:python
代码运行次数:0
复制
import psutil

psutil.cpu_stats()
代码语言:python
代码运行次数:0
复制
import psutil

psutil.cpu_freq()
代码语言:python
代码运行次数:0
复制
import psutil

psutil.getloadavg()
代码语言:python
代码运行次数:0
复制
import psutil

psutil.cpu_times()

2.2 内存-memory

内存方面,在psutil中分为两个方法,一个是实际使用内存(psutil.virtual_memory()),另外一个就是交换内存(psutil.swap_memory())。

  • 实际使用内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.virtual_memory()
  • 交换区内存(元组形式返回,数据单位为KB,实际上相当于我们在shell中的free或者top命令):psutil.swap_memory()

命令行示例:

代码语言:shell
复制
>>> psutil.virtual_memory()
svmem(total=17179869184, available=6904385536, percent=59.8, used=9077141504, free=1129152512, active=5775421440, inactive=5670367232, wired=3301720064)
>>> 
>>> psutil.swap_memory()
sswap(total=1073741824, used=146538496, free=927203328, percent=13.6, sin=29824843776, sout=240508928)
>>> 

可运行代码:

代码语言:python
代码运行次数:0
复制
import psutil

psutil.virtual_memory()
代码语言:python
代码运行次数:0
复制
import psutil

psutil.swap_memory()

2.3 磁盘-disks

磁盘就比较简单些,主要有三个方法:

  • 磁盘分区挂载:psutil.disk_partitions()
  • 磁盘使用情况:psutil.disk_usage(path),path为分区挂载中的路径(本机器可以执行,在此处代码执行报错)
  • 磁盘IO统计信息,包括读、写的次数,读、写的字节数等:psutil.disk_io_counters(perdisk=False, nowrap=True)

命令行代码:

代码语言:shell
复制
>>> psutil.disk_partitions(all=False)
[sdiskpart(device='/dev/vdb', mountpoint='/', fstype='apfs', opts='ro,local,rootfs,dovolfs,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s4', mountpoint='/System/Volumes/VM', fstype='apfs', opts='rw,noexec,local,dovolfs,dontbrowse,journaled,multilabel,noatime', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s2', mountpoint='/System/Volumes/Preboot', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s6', mountpoint='/System/Volumes/Update', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk1s1', mountpoint='/System/Volumes/Data', fstype='apfs', opts='rw,local,dovolfs,dontbrowse,journaled,multilabel', maxfile=255, maxpath=1024), sdiskpart(device='/dev/disk2s1', mountpoint='/Volumes/Tickeys', fstype='hfs', opts='ro,nosuid,quarantine,local,dovolfs,ignore-ownership,multilabel', maxfile=255, maxpath=1024)]
>>> 
>>> psutil.disk_io_counters(perdisk=False, nowrap=True)
sdiskio(read_count=3788644, write_count=2529531, read_bytes=74410997248, write_bytes=78161825792, read_time=2925376, write_time=1002444)
>>> 

可运行代码:

代码语言:python
代码运行次数:0
复制
import psutil

psutil.disk_partitions(all=False)
代码语言:python
代码运行次数:0
复制
import psutil

psutil.disk_io_counters(perdisk=False, nowrap=True)

2.4 网络-network

请移步到官方提供的文档中找,这里不在赘述。

2.5 传感器-sensors

请移步到官方提供的文档中找,这里不在赘述。

3 自动化CPU、内存脚本

3.1 创建脚本cpu_memory.py

代码语言:shell
复制
# coding=gbk
#!/usr/bin/python

import psutil
import datetime
import time

def func1():
    # CPU的逻辑核数
    cpu_count = psutil.cpu_count()
    # cpu的使用率
    cup_per = psutil.cpu_percent(interval=0.5) # 0.5刷新频率
    print(f"cpu的逻辑核数为{cpu_count},cpu的平均使用率为{cup_per}")
    # 内存信息
    memory_info = psutil.virtual_memory()
    # 总内存
    memory_total = memory_info.total / 1024 / 1024
    # 内存使用率
    #memory_per = (memory_total - memory_info.available) / memory_total * 100
    memory_per = memory_info.percent
    print(f"总内存大小为{memory_total}M,内存的使用率为{memory_per}")
    # 硬盘信息
    disk_info = psutil.disk_usage("/") # 根目录磁盘信息
    #print(disk_info)
    # 根目录大小
    disk_total = disk_info.total
    # 根目录使用情况
    disk_per = float(disk_info.used / disk_total * 100 )
    print(f"根目录大小为{disk_total / 1024 / 1024}M,根目录使用率为{round(disk_per,2)}")
    # # 网络使用情况
    # net = psutil.net_io_counters()
    # #print(net)
    # # 网卡配置信息
    # net_ipy = psutil.net_if_addrs()
    # #print(f"net_ipy {net_ipy}")
    # net_ip = net_ipy['ens33'][0][1]
    # print(f"本机的IP地址为{net_ip}")
    # # 收取数据
    # net_recv = float( net.bytes_recv / 1024 /1024)
    # # 发送数据
    # net_sent = float(net.bytes_sent /1024 /1024)
    # print(f"网络收取{round(net_recv,2)}M的数据,发送{round(net_sent,2)}M的数据")
    # 获取当前系统时间
    current_time = datetime.datetime.now().strftime("%F %T") # %F年月日 %T时分秒
    print(f"当前时间是:{current_time}")
    time.sleep(1)
 
start = time.time()
end = time.time()
count = 0
while end - start <= 10:
    count += 1
    end = time.time()
    print(f"执行第{count}次".center(50,'*'))
    func1()

3.2 定时执行,写入到文件

将打印日志写入到文件即可完成自动查询日志数据。

参考文章

[1]psutil : https://pypi.org/project/psutil/

[2]pstuil官方文档:https://psutil.readthedocs.io/en/latest/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 psutil介绍和安装
    • 1.1 安装psutil第三方库
    • 2 psutil在终端命令中使用
      • 2.1 CPU
        • 2.2 内存-memory
          • 2.3 磁盘-disks
            • 2.4 网络-network
              • 2.5 传感器-sensors
              • 3 自动化CPU、内存脚本
                • 3.1 创建脚本cpu_memory.py
                  • 3.2 定时执行,写入到文件
                  • 参考文章
                  相关产品与服务
                  命令行工具
                  腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com