[Módulo de Python] psutil

1. Introducción a psutil

psutil (Python System and Process Utilities) es una biblioteca multiplataforma para recuperar información sobre los procesos en ejecución y la utilización del sistema (CPU, memoria, disco, red, sensores) en Python. Se utiliza principalmente para el monitoreo del sistema, el análisis, la limitación de los recursos del proceso y la gestión de los procesos en ejecución. Implementa muchas funciones proporcionadas por las herramientas de línea de comandos de UNIX, como: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, tasket, pmap. psutil actualmente es compatible con Linux, Windows, macOS, FreeBSD/penBSD/NetBSD, Sun Solaris, AIX y otras plataformas.

Las versiones de Python compatibles con psutil son 2.7 y 3.4+. Métodos de descarga en Linux, Windows y macOS:

pip install psutil

A continuación, ordene las funciones y las API relacionadas con la CPU, la memoria, el disco, la red, etc.

2. Funciones relacionadas con el sistema

CPU 2.1

Funciones relacionadas con la CPU:

nombre de la función

función

otras instrucciones

cpu_times( percpu=Falso )

Devolver el tiempo de CPU del sistema como una tupla con nombre

Cuando percpu es True, devuelve una lista de tuplas con nombre para cada CPU lógica del sistema. El primer elemento de la lista apunta a la primera CPU, el segundo elemento apunta a la segunda CPU y así sucesivamente.

cpu_percent(interval=None, percpu=False)

返回表示当前系统范围内CPU利用率百分比的浮点值。

当间隔>0.0时,比较间隔前后经过的系统CPU时间(阻塞)。当interval为0.0或None时,比较自上次调用或模块导入以来经过的系统CPU时间,并立即返回。

cpu_times_percent(interval=None, percpu=False)

与cpu_percent()相同,但提供psutil.cpu_times(percpu=True)返回的每个特定cpu时间的利用率百分比。

interval和percpu参数的含义与cpu_percent()中的含义相同。

cpu_count(logical=True)

返回系统中逻辑cpu的数量(与Python 3.4中的os.cpu_count相同),如果不确定,则返回None。

“逻辑CPU”是指物理内核数乘以每个内核上可以运行的线程数(这称为“超线程”)。如果逻辑值为False,则仅返回物理内核的数量,如果未确定,则返回None。

cpu_stats()

以命名元组的形式返回各种CPU统计信息

ctx_switches:自启动以来上下文开关的数量。

interrupts:自启动以来中断数。

soft_interrupts:自启动以来软件中断数。

syscalls:自启动以来系统调用数。在Linux上始终设置为0。

cpu_freq(percpu=False)

以命名元组形式返回CPU频率,包括以Mhz表示的当前、最小和最大频率

如果percpu为True,并且系统支持每cpu频率检索(仅限Linux),则为每个cpu返回一个频率列表,如果不是,则返回一个包含单个元素的列表。如果无法确定最小值和最大值,则将其设置为0.0。

getloadavg()

以元组形式返回过去1、5和15分钟内的平均系统负载。

“负载”表示处于可运行状态的进程,使用CPU或等待使用CPU(例如等待磁盘I/O)。在UNIX系统上,这依赖于os.getloadavg。在Windows上,这是通过使用Windows API来模拟的,该API生成一个线程,该线程保持在后台运行,每5秒更新一次结果,模拟UNIX行为。因此,在Windows上,第一次调用它时,在接下来的5秒内,它将返回一个无意义的(0.0,0.0,0.0)元组。

Usar demostración : (plataforma de prueba actual --- Windows)

import psutil

# scputimes(user=2240.359305, system=2669.05, idle=20536.234305, interrupt=174.21805, dpc=443.953125)
print(psutil.cpu_times())
# 0.0
print(psutil.cpu_percent())
# scputimes(user=0.0, system=0.0, idle=0.0, interrupt=0.0, dpc=0.0)
print(psutil.cpu_times_percent())
# scpustats(ctx_switches=82697106, interrupts=58590008, soft_interrupts=0, syscalls=331427222)
print(psutil.cpu_stats())
# 8
print(psutil.cpu_count())
# scpufreq(current=1792.0, min=0.0, max=1992.0)
print(psutil.cpu_freq())
# (0.0, 0.0, 0.0)
print(psutil.getloadavg())

Se puede ver desde aquí que la información de configuración de la CPU es: ocho núcleos, la frecuencia máxima de la CPU es 1992 MHz, la frecuencia actual es 1792 MHz, etc.

2.2 Memoria

La memoria se puede dividir en memoria virtual y memoria de intercambio, con las siguientes dos funciones:

①, virtual_memory() : Devuelve estadísticas sobre el uso de la memoria del sistema (en bytes) en forma de tuplas con nombre. Los principales indicadores son:

  • total: memoria física total (exclusivo swap).
  • disponible: memoria disponible.
  • used: Memoria usada.
  • libre: memoria libre.
  • activo (UNIX): Memoria actualmente en uso o recientemente utilizada.
  • inactivo (UNIX): Memoria marcada como no utilizada.
  • Búferes (Linux, BSD): Búferes como los metadatos del sistema de archivos.
  • en caché (Linux, BSD): almacena en caché diversos contenidos.
  • compartida (Linux, BSD): memoria a la que múltiples procesos pueden acceder simultáneamente.
  • slab (Linux): en la memoria caché de la estructura de datos del kernel.
  • cableado (BSD, macOS): memoria marcada para permanecer siempre en RAM. Nunca se mueve al disco.
# 当前测试平台,Windows
# svmem(total=8434085888, available=1996607488, percent=76.3, used=6437478400, free=1996607488)
print(psutil.virtual_memory())

②, swap_memory() : devuelve las estadísticas de la memoria de intercambio del sistema como una tupla con nombre (en bytes), incluidos los siguientes campos:

  • total: Intercambio de memoria en total.
  • used: Memoria de intercambio usada.
  • libre: memoria de intercambio disponible.
  • porcentaje: Utilice el porcentaje, calculado como (total disponible)/total*100.
  • sin: el número de bytes que el sistema ha intercambiado desde el disco (acumulativo).
  • sout: el número de bytes que el sistema ha intercambiado desde el disco (acumulativo).
# 当前测试平台,Windows
# sswap(total=15144972288, used=8803577856, free=6341394432, percent=58.1, sin=0, sout=0)
print(psutil.swap_memory())

2.3 Discos

--> disk_partitions(): Devuelve toda la información de la partición de disco montada en forma de tupla con nombre, incluido el dispositivo, el punto de montaje, el tipo de sistema de archivos, etc. Si está en la plataforma Linux, use el comando df de manera similar.

--> disk_usage(ruta): Devuelve estadísticas de uso del disco sobre la partición que contiene la ruta dada como una tupla con nombre, incluido el espacio total en bytes, el espacio usado y libre, y el porcentaje usado.

--> disk_io_counters(): devuelve estadísticas de E/S de disco de todo el sistema (incluidos read_count, write_count, read_bytes, write_bytes, read_time, write_time y otros campos) en forma de una tupla con nombre.

# 当前测试平台,Windows

# [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed', maxfile=255, maxpath=260)]
print(psutil.disk_partitions())

# sdiskusage(total=161051269304, used=48602433888, free=112459735616, percent=31.2)
print(psutil.disk_usage("/"))

# sdiskio(read_count=800572, write_count=166800, read_bytes=26395607296, write_bytes=7520133392, read_time=814, write_time=97)
print(psutil.disk_io_counters())

2.4 Red

--> net_io_counters(): Devuelve estadísticas de E/S de red de todo el sistema en forma de una tupla con nombre.

--> net_connections(): Devuelve las conexiones de socket de todo el sistema como una lista de tuplas con nombre.

# 当前测试平台,Windows

#snetio(bytes_sent=1665035507, bytes_recv=16602087092, packets_sent=11453498, packets_recv=14149630, errin=0, errout=0, dropin=0, dropout=0)
print(psutil.net_io_counters())

#[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='0.0.0.0', port=49685), raddr=(), status='LISTEN', pid=4404)]
print(psutil.net_connections())

--> net_if_addrs(): Devuelve la información de la dirección asociada con cada puerto de red instalado en el sistema en forma de diccionario.

--> net_if_stats(): devuelve la información de cada puerto de red instalado en el sistema en forma de diccionario (isup-identifica si el puerto de red está iniciado y funcionando normalmente, tipo de comunicación dúplex-dúplex, velocidad-velocidad de transmisión, mtu -máximo bytes de transmisión, banderas-banderas del puerto de red).

# 当前测试平台,Windows

#{'本地连接* 3': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='82-91-33-91-F1-BD', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.163.103', netmask='255.255.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::aa55:ee0f:3f9e:e5f0', netmask=None, broadcast=None, ptp=None)]}
print(psutil.net_if_addrs())

#{'本地连接* 3': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)}
print(psutil.net_if_stats())

2.5 Procesos

--> pids(): Devuelve una lista de los pids actualmente en ejecución (ordenados).

--> process_iter(): Devuelve un iterador que genera una instancia de clase Process para todos los procesos en ejecución en la computadora local. Esto debería preferirse al método pids() para iterar sobre procesos, ya que es inmune a las condiciones de carrera.

--> pid_exists(pid): Averigüe si el pid especificado existe en la lista de pids actualmente en ejecución.

2.6 Otra información del sistema

--> usuarios(): Devuelve los usuarios actualmente conectados en el sistema como una tupla con nombre.

--> boot_time(): Devuelve el tiempo de arranque del sistema (en segundos) desde la época.

3. Resumen

Las anteriores son la mayoría de las API de este módulo, algunas de las cuales son bastante prácticas, así que anótelas aquí.

Referencias:

documentación de psutil — documentación de psutil 5.9.5

Supongo que te gusta

Origin blog.csdn.net/qq_29119581/article/details/128180387
Recomendado
Clasificación