Quiero medir el ancho de banda de mi servidor de reenvío implementado en Python, lo que significa que quiero medir cuántos bytes procesa mi servidor por segundo. Entonces, cómo estaba planeando hacer eso es: durante un período de tiempo fijo (por ejemplo 300sec
), estoy midiendo el número de received bytes
y sent bytes
. Después de este período de tiempo calculo la relación: bytes_received / bytes_sent
. Sin embargo, no estoy seguro de que esto sea lo que quiero, porque me da una proporción (que generalmente es alrededor de 1-1,5), lo que significa que proceso todos o casi todos los mensajes que recibí en algún período de tiempo, pero Quiero medir cuántos bytes procesé. Estaría muy agradecido si alguien pudiera aconsejarme cómo puedo medir mi ancho de banda.
Respuesta1
Creo que lo que necesitas es hacer esto:
bytes_recibidos= bytes_recibidos300s - bytes_recibidos0s
bytes_enviados= bytes_enviados300s - bytes_enviados0s
total_bytes_procesados= bytes_recibidos - bytes_enviados
Esto le daría la cantidad total de bytes procesados durante el período de 300.
Respuesta2
Puede utilizar psutil.net_io_counters() para calcular el ancho de banda durante un período de tiempo. Tomarás una instantánea a los 0 segundos y una instantánea a los 300 segundos.
def get_bandwidth():
# Get net in/out
net1_out = psutil.net_io_counters().bytes_sent
net1_in = psutil.net_io_counters().bytes_recv
time.sleep(300) # Not best way to handle getting a value 300 seconds later
# Get new net in/out
net2_out = psutil.net_io_counters().bytes_sent
net2_in = psutil.net_io_counters().bytes_recv
# Compare and get current speed
if net1_in > net2_in:
current_in = 0
else:
current_in = net2_in - net1_in
if net1_out > net2_out:
current_out = 0
else:
current_out = net2_out - net1_out
network = {"traffic_in": current_in, "traffic_out": current_out}
# Return data in bytes
return network