Я хочу измерить пропускную способность моего сервера-ремейлера, реализованного на Python, что означает, что я хочу измерить, сколько байт обрабатывает мой сервер в секунду. Итак, как я планировал это сделать: в течение фиксированного периода времени (например 300sec
), я измеряю количество received bytes
и sent bytes
. По истечении этого периода времени я вычисляю отношение: bytes_received / bytes_sent
. Однако я не уверен, что это то, что мне нужно, потому что это дает мне отношение (которое обычно составляет около 1-1,5), так что это означает, что я обрабатываю все или почти все сообщения, которые я получил за какой-то период времени, но я хочу измерить, сколько байт я обработал. Я буду очень признателен, если кто-нибудь сможет посоветовать мне, как я могу измерить свою пропускную способность.
решение1
Я думаю, вам нужно сделать следующее:
получено_байтов= получено_байт300с - получено_байт0с
байты_отправлены= байт_отправлено300с - байт_отправлено0с
всего_байт_обработано= байты_получено - байты_отправлено
Это даст вам общее количество байтов, обработанных за 300-секундный период.
решение2
Вы можете использовать psutil.net_io_counters() для расчета пропускной способности за определенный период времени. Вы сделаете снимок в 0 секунд и снимок в 300 секунд.
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