Explicación detallada del uso de la biblioteca psutil

1. Antecedentes

En el mundo de Python, existen algunas bibliotecas que los desarrolladores adoran por sus potentes funciones y facilidad de uso. Hoy vamos a presentar uno de ellos: la biblioteca psutil. psutil (sistema Python y utilidades de proceso) es una biblioteca de terceros multiplataforma que se utiliza para obtener información sobre la utilización del proceso y del sistema (incluida la CPU, la memoria, el disco, la red, etc.) cuando el sistema se está ejecutando. Se utiliza principalmente para monitoreo de sistemas, análisis de desempeño, gestión de procesos y otros escenarios.

2. Instalación y uso básico

instalación psutil:

pip install psutil

Una vez completada la instalación, podemos comenzar a usar la biblioteca psutil. A continuación, presentaremos algunas funciones de uso común.

1. Obtener información de la CPU

La biblioteca psutil puede obtener el uso de la CPU. Por ejemplo, podemos usar psutil.cpu_percent(interval=1) para obtener el uso de la CPU.

import psutil
cpu_percent = psutil.cpu_percent(interval=1)print(f'CPU usage: {cpu_percent}%')

2. Obtener información de la memoria

Podemos usar psutil.virtual_memory() para obtener el uso de memoria del sistema.

import psutil
mem_info = psutil.virtual_memory()print(f'Total memory: {mem_info.total / (1024**3):.2f} GB')print(f'Used memory: {mem_info.used / (1024**3):.2f} GB')print(f'Memory usage: {mem_info.percent}%')

3. Obtener información del disco

La biblioteca psutil también puede obtener el uso del disco. Por ejemplo, podemos usar psutil.disk_usage('/') para obtener el uso del disco del directorio raíz.

import psutil
disk_usage = psutil.disk_usage('/')print(f'Total disk space: {disk_usage.total / (1024**3):.2f} GB')print(f'Used disk space: {disk_usage.used / (1024**3):.2f} GB')print(f'Disk usage: {disk_usage.percent}%')

4. Obtener información del proceso

La biblioteca psutil también puede obtener información sobre todos los procesos que se ejecutan en el sistema. Por ejemplo, podemos usar psutil.pids() para obtener los PID de todos los procesos.

import psutil
pids = psutil.pids()print(f'Total processes: {len(pids)}')

3. Aplicación práctica del proyecto

imagen

Supongamos que existe tal requisito: ejecute el programa Pycharm durante un tiempo prolongado y supervise el uso de CPU/memoria del programa Pycharm para verificar si el uso de la CPU aumenta o si se producen pérdidas de memoria cuando el programa Pycharm se abre durante mucho tiempo.

Según tales necesidades, podemos usar la biblioteca psutil y la biblioteca pandas para completarlo, el script es el siguiente:

1. Obtenga el uso general de CPU y memoria de la computadora.

# 获取电脑整体的CPU、内存占用情况def getMemory():    data = psutil.virtual_memory()    memory = str(int(round(data.percent))) + "%"    print("系统整体memory占用:"+memory)    return memory

def getCpu():    cpu_list=psutil.cpu_percent(percpu=True)    average_cpu = round(sum(cpu_list) / len(cpu_list),2)    cpu=str(average_cpu) + "%"    print("系统整体cpu占用:"+cpu)    return cpu

2. Obtenga el código de información de uso de CPU y memoria del proceso especificado.

# 获取指定进程的CPU和内存占用信息代码def getMemSize(pid):    # 根据进程号来获取进程的内存大小    process = psutil.Process(pid)    memInfo = process.memory_info()
    # rss: 该进程实际使用物理内存(包含共享库占用的全部内存)。    # vms:该进程使用的虚拟内存总量。
    return memInfo.rss / 1024 / 1024
def getCpuPercent(pid):    # 根据进程号来获取进程的内存大小    p = psutil.Process(pid)    p_cpu = p.cpu_percent(interval=0.1)    cpu = round(p_cpu,2)    return cpu
def getTotalM(processName):    # 一个进程名对应的可能有多个进程    # 进程号才是进程的唯一标识符,进程名不是    totalM = 0    for i in psutil.process_iter():        if i.name() == processName:            totalM += getMemSize(i.pid)    print('进程占用内存:%.2f MB' % totalM)    finalM=round(totalM,2)    return finalM
def getTotalCPU(processName):    # 一个进程名对应的可能有多个进程    # 进程号才是进程的唯一标识符,进程名不是    totalCPU = 0    for i in psutil.process_iter():        if i.name() == processName:            totalCPU += getCpuPercent(i.pid)    totalCPU_convert=round(totalCPU,2)    finalCPU=str(totalCPU_convert)+'%'    print("进程占用CPU:"+finalCPU)    return totalCPU_convert

3. Escriba los datos de los resultados de la prueba en un archivo csv.

# 将测试结果数据写入csv文件def writeExcel(caseName,cpu,mem,pycharmcpu,pycharmmem):    timestamp = time.strftime('%Y-%m-%d-%H:%M:%S', time.localtime(time.time()))    dict = {'caseName': [caseName], 'Sys_CPU': [cpu], 'Sys_Memory': [mem], 'Pycharm_Cpu': [pycharmcpu], 'Pycharm_Mem': [pycharmmem],'OperationTime':[timestamp]}
    # 字典中的key值即为csv中列名    dataframe = pd.DataFrame(dict)    dataframe['OperationTime'] = pd.to_datetime(dataframe['OperationTime'])
    # 将DataFrame存储为csv, mode='a'表示每一次都是追加内容而不是覆盖,header=False表示不写列名    dataframe.to_csv("cpuAndMemtest.csv", date_format='%Y-%m-%d-%H:%M:%S', mode='a',index=False,header=False,encoding='GBK')

4. Encapsule el método como una función para que pueda llamarse directamente más tarde.

# 封装方法为函数,以便后续直接调用def getCpuAndMem(caseName,processName1):    memory = getMemory()    cpu = getCpu()    # 获取pycharm64.exe进程占用的CPU和内存    pycharmmem = getTotalM(processName1)    pycharmcpu = str(getTotalCPU(processName1))+'%'
    time.sleep(1)    writeExcel(caseName,cpu,memory,pycharmcpu,pycharmmem)    print("系统整体CPU占用:%s     系统整体内存占用:%s   进程_CPU占用:%s  进程内存占用:%s"%(cpu, memory, pycharmcpu, pycharmmem))    print("===============================================================")

5. Ejecute el script

Supongo que te gusta

Origin blog.csdn.net/davice_li/article/details/131730056
Recomendado
Clasificación