51 lines
1.7 KiB
Python
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() |