Procesos y monitorización con psutil

Psutil (process and system utilities), es una librería Python que obtiene información de los procesos y utilización del sistema como pueden ser la cpu, memoria, discos, redes o sensores y que funciona bajo Windows, MacOS o Linux.

Antes de hacer la instalación en Linux, tendremos que instalar previamente gcc y python3-dev.

Para instalarlo en distribuciones Debian como Ubuntu usaremos el comando:

# apt install gcc python3-dev
# pip3 install psutil

En el caso de distribuciones basadas en Redhat se instala así:

# yum install gcc python3-devel
# pip3 install psutil

Para instalarla en Windows debemos ejecutar el comando pip de la siguiente manera:

# pip install psutil

Para instalarlo en MacOS usaremos:

# pip3 install psutil

Vamos a usar el interprete interactivo de Python para comprobar los métodos principales. Para ello ejecutamos el interprete escribiendo el siguiente comando en el símbolo del sistema o terminal:

# python3

Antes de usar los métodos de esta librería primero debemos importarla en Python con el comando:

>>> import psutil

Comencemos por revisar el número de procesadores lógicos que posee nuestro dispositivo con el siguiente comando:

>>> print('Procesadores lógicos: %s' %psutil.cpu_count())

Y obtendremos el siguiente resultado, dependiendo del dispositivo.

>>> Procesadores lógicos: 4

El método cpu_count obtiene el número de procesadores lógicos del dispositivo, si lo que queremos ver es el número de procesadores físicos deberemos obtener el valor pasando el atributo logical igual a False.

>>> psutil.cpu_count(logical=False)
2

Para obtener información de las particiones de disco disponibles en el dispositivo usamos el siguiente método:

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,relatime,errors=remount-ro')]

Para obtener una lista con los valores de uso de disco usamos:

>>> psutil.disk_usage('/')
sdiskusage(total=18889785344, used=15598764032, free=2307878912, percent=87.1)

Si queremos ver el tamaño total de la partición, el tamaño usado y el espacio disponible, podemos localizarlos en la lista.

>>> usodisco = psutil.disk_usage('/')
>>> usodisco
sdiskusage(total=18889785344, used=15598800896, free=2307842048, percent=87.1)
>>> usodisco.total
18889785344
>>> usodisco.used
15598800896
>>> usodisco.free
2307842048
>>> usodisco.percent
87.1

Con esto podríamos, por ejemplo, monitorizar el espacio disponible de una partición. Para hacer estos valores mas humanos podéis dividir entre 1024 para KBs, (1024*1024) para MBs o (1024*1024*1024) para GBs. 

Para ver los métodos que dispone la librería podemos hacer uso de dir().

>>> dir(psutil)
['AF_LINK', 'AIX', 'AccessDenied', 'BSD', 'CONN_CLOSE', 'CONN_CLOSE_WAIT', 'CONN_CLOSING', 'CONN_ESTABLISHED', 'CONN_FIN_WAIT1', 'CONN_FIN_WAIT2', 'CONN_LAST_ACK', 'CONN_LISTEN', 'CONN_NONE', 'CONN_SYN_RECV', 'CONN_SYN_SENT', 'CONN_TIME_WAIT', 'Error', 'FREEBSD', 'IOPRIO_CLASS_BE', 'IOPRIO_CLASS_IDLE', 'IOPRIO_CLASS_NONE', 'IOPRIO_CLASS_RT', 'LINUX', 'MACOS', 'NETBSD', 'NIC_DUPLEX_FULL', 'NIC_DUPLEX_HALF', 'NIC_DUPLEX_UNKNOWN', 'NoSuchProcess', 'OPENBSD', 'OSX', 'POSIX', 'POWER_TIME_UNKNOWN', 'POWER_TIME_UNLIMITED', 'PROCFS_PATH', 'PermissionError', 'Popen', 'Process', 'ProcessLookupError', 'RLIMIT_AS', 'RLIMIT_CORE', 'RLIMIT_CPU', 'RLIMIT_DATA', 'RLIMIT_FSIZE', 'RLIMIT_LOCKS', 'RLIMIT_MEMLOCK', 'RLIMIT_MSGQUEUE', 'RLIMIT_NICE', 'RLIMIT_NOFILE', 'RLIMIT_NPROC', 'RLIMIT_RSS', 'RLIMIT_RTPRIO', 'RLIMIT_RTTIME', 'RLIMIT_SIGPENDING', 'RLIMIT_STACK', 'RLIM_INFINITY', 'STATUS_DEAD', 'STATUS_DISK_SLEEP', 'STATUS_IDLE', 'STATUS_LOCKED', 'STATUS_PARKED', 'STATUS_RUNNING', 'STATUS_SLEEPING', 'STATUS_STOPPED', 'STATUS_TRACING_STOP', 'STATUS_WAITING', 'STATUS_WAKING', 'STATUS_ZOMBIE', 'SUNOS', 'TimeoutExpired', 'WINDOWS', 'ZombieProcess', '_LOWEST_PID', '_PY3', '_SENTINEL', '_TOTAL_PHYMEM', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_as_dict_attrnames', '_assert_pid_not_reused', '_common', '_compat', '_cpu_busy_time', '_cpu_times_deltas', '_cpu_tot_time', '_last_cpu_times', '_last_cpu_times_2', '_last_per_cpu_times', '_last_per_cpu_times_2', '_lock', '_pmap', '_ppid_map', '_pprint_secs', '_pslinux', '_psplatform', '_psposix', '_psutil_linux', '_psutil_posix', '_timer', '_wrap_numbers', 'boot_time', 'collections', 'contextlib', 'cpu_count', 'cpu_freq', 'cpu_percent', 'cpu_stats', 'cpu_times', 'cpu_times_percent', 'datetime', 'disk_io_counters', 'disk_partitions', 'disk_usage', 'functools', 'getloadavg', 'long', 'net_connections', 'net_if_addrs', 'net_if_stats', 'net_io_counters', 'os', 'pid_exists', 'pids', 'process_iter', 'pwd', 'sensors_battery', 'sensors_fans', 'sensors_temperatures', 'signal', 'subprocess', 'swap_memory', 'sys', 'test', 'threading', 'time', 'users', 'version_info', 'virtual_memory', 'wait_procs']

Y luego ver la ayuda del método usando help(), como por ejemplo para averiguar como funciona el método sensors_battery con el cual obtendremos el porcentaje o tiempo disponible o si el dispositivo está conectado a corriente.

 >>> help(psutil.sensors_battery)
Help on function sensors_battery in module psutil:

sensors_battery()
    Return battery information. If no battery is installed
    returns None.
    
     - percent: battery power left as a percentage.
     - secsleft: a rough approximation of how many seconds are left
                 before the battery runs out of power. May be
                 POWER_TIME_UNLIMITED or POWER_TIME_UNLIMITED.
     - power_plugged: True if the AC power cable is connected.
(END)

Si queremos ver el porcentaje de batería disponible podemos hacerlo con percent, recordad que si el dispositivo no dispone de batería el valor obtenido será None. Veamos un ejemplo:

>>> batería = psutil.sensors_battery()
>>> batería.percent
33

Si se os ocurre algún otro uso, por favor, compartidlo.

Gracias.

Si te ha servido de ayuda, invítame a un café.

4 comentarios en «Procesos y monitorización con psutil»

  1. ¿Qué versión de Python estás usando? Soy nueva en estom instalé la 3.9 y no me deja instalar psutil. Te pregunto porque veo que la publicación es reciente.
    Eso a un lado, gracias por la información, solucionando aquel problema con esto podré trabajar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *