ProyectoPSP/network_monitor.py

51 lines
1.7 KiB
Python

import psutil
import time
import threading
# Almacenar los contadores iniciales para calcular la diferencia
_initial_counters = None
def get_net_usage():
"""Obtiene el tráfico de red desde el inicio del proceso y lo devuelve en KB."""
global _initial_counters
# 1. Obtener los contadores actuales
net_io = psutil.net_io_counters()
if _initial_counters is None:
_initial_counters = net_io
# Devuelve 0 para la primera lectura ya que no hay diferencia que calcular
return 0.0, 0.0
# 2. Calcular la diferencia (tráfico total desde el inicio de la app)
bytes_sent = net_io.bytes_sent - _initial_counters.bytes_sent
bytes_recv = net_io.bytes_recv - _initial_counters.bytes_recv
# 3. Convertir a Kilobytes (1024 bytes = 1 KB)
kb_sent = bytes_sent / 1024
kb_recv = bytes_recv / 1024
return kb_sent, kb_recv
def start_network_monitoring_thread(root_app):
"""Inicia un hilo que monitorea el tráfico de red y actualiza la UI."""
def monitor_loop():
# Ejecutar continuamente mientras la aplicación esté viva
while root_app.winfo_exists():
kb_sent, kb_recv = get_net_usage()
# Usar after() para actualizar la interfaz de usuario de forma segura
root_app.after(
0,
root_app.update_net_status,
kb_sent,
kb_recv
)
# Esperar 2 segundos antes de la próxima actualización
time.sleep(2)
# Crear y lanzar el hilo de monitoreo
thread = threading.Thread(target=monitor_loop, daemon=True)
thread.start()