Ich möchte die Bandbreite meines in Python implementierten Remailer-Servers messen, das heißt, ich möchte messen, wie viele Bytes mein Server pro Sekunde verarbeitet. Ich habe vor, das folgendermaßen zu tun: Für einen festgelegten Zeitraum (zum Beispiel 300sec
) messe ich die Anzahl von received bytes
und sent bytes
. Nach diesem Zeitraum berechne ich das Verhältnis: bytes_received / bytes_sent
. Ich bin mir jedoch nicht sicher, ob das das ist, was ich will, da es mir ein Verhältnis gibt (das normalerweise bei 1-1,5 liegt). Das bedeutet, dass ich alle oder fast alle Nachrichten verarbeite, die ich in einem bestimmten Zeitraum erhalten habe, aber ich möchte messen, wie viele Bytes ich verarbeitet habe. Ich wäre sehr dankbar, wenn mir jemand einen Rat geben könnte, wie ich meine Bandbreite messen kann.
Antwort1
Ich denke, Sie müssen Folgendes tun:
Empfangene Bytes= bytes_received300s - bytes_received0s
Gesendete Bytes= bytes_sent300s - bytes_sent0s
insgesamt verarbeitete Bytes= empfangene Bytes - gesendete Bytes
Dadurch erhalten Sie die Gesamtzahl der während des 300er-Zeitraums verarbeiteten Bytes.
Antwort2
Sie können psutil.net_io_counters() verwenden, um die Bandbreite über einen bestimmten Zeitraum zu berechnen. Sie erstellen einen Snapshot bei 0 Sekunden und einen Snapshot bei 300 Sekunden.
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