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 |
|
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. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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: