Messen Sie die WLAN-Geschwindigkeit mit Python

Dieser Artikel ist der Artikel zum 13. Tag des JSL \ (Nippon System Giken ) Adventskalenders 2019.


Vor kurzem hatte ich das Gefühl, dass es einen Zeitpunkt gab, an dem sich das WLAN in der Firma verlangsamte, aber ich wusste nicht quantitativ, wie langsam es war, und schrieb ein Skript, um regelmäßig einen Geschwindigkeitstest durchzuführen.

Erste Zusammenfassung

-Ich habe ein Programm in Python geschrieben, um die Geschwindigkeit von internem WLAN mithilfe von Speedtest CLI \ -Internet-Verbindungsmessung für Entwickler zu messen.

Geschwindigkeitstest von CUI

Zunächst wollte ich es regelmäßig mit Cron usw. ausführen, also dachte ich darüber nach, einen Geschwindigkeitstest mit CUI durchzuführen

In meinem Bild wurde der Geschwindigkeitstest wie folgt gemessen: Suchen → Ausführen….

スクリーンショット 2019-12-23 15.54.09.png

Ich habe versucht, die Mittel zum Messen der Netzwerkleitungsgeschwindigkeit unter Linux | Developers \ .IO zu organisieren ) Es scheint, dass speedtest.net die CLI bereitstellt, als ich beim Betrachten des Artikels usw. nachgeforscht habe.

Die Speedtest-CLI bietet auch ein Python-Paket:

ich fand heraus

Erstellen einer Speedtest-Ausführungsumgebung

Ich habe eine Umgebung mit pipenv erstellt

$ mkdir wifi_speedtest
$ cd $_  
#Wenn pipenv nicht installiert ist
# brew install pipenv

#Erstellen Sie eine virtuelle Umgebung
$ pipenv --python 3.7

#Paketinstallation
$ pipenv install speedtest-cli

#Virtuelle Umgebung aktivieren
$ pipenv shell

#Testen Sie den Befehl speedtest
(.venv) $ speedtest --version
speedtest-cli 2.1.2
Python 3.7.4 (default, Oct 12 2019, 18:55:28) [Clang 11.0.0 (clang-1100.0.33.8)]

Versuchen Sie, Speedtest unter CUI auszuführen

Sie können eine Liste der Verbindungszielserver erhalten, die von Freiwilligen mit speedtest --list bereitgestellt werden. Entscheiden Sie sich also für einen und notieren Sie sich die Nummer.

(.venv) $ speedtest --list | grep Tokyo
15047) OPEN Project (via 20G SINET) (Tokyo, Japan) [6.34 km]
24333) Rakuten Mobile , Inc (Tokyo, Japan) [6.34 km]
28910) fdcservers.net (Tokyo, Japan) [6.34 km]
18516) GIAM PING VIETPN.COM (Tokyo, Japan) [6.34 km]
22247) Tokyonet (Castro, Brazil) [18486.74 km]

Wenn Sie Folgendes angeben, wird der Geschwindigkeitstest immer auf dem angegebenen Server ausgeführt. Für einen von Rakuten Mobile, Inc bereitgestellten Server wäre die Nummer beispielsweise 24333.

#Geschwindigkeitstest ausführen
(.venv) $ speedtest --server 24333
Retrieving speedtest.net configuration...
Testing from XXX (xx.xx.xx.xx)...
Retrieving speedtest.net server list...
Retrieving information for the selected server...
Hosted by Rakuten Mobile , Inc (Tokyo) [6.34 km]: 200.123 ms
Testing download speed................................................................................
Download: 16.08 Mbit/s
Testing upload speed......................................................................................................
Upload: 31.96 Mbit/s

Ich konnte sicher messen (einige Kundeninformationen sind versteckt)

Dies ist jedoch im Programm schwierig zu handhaben. Fügen Sie daher "--json" hinzu und versuchen Sie, das Ergebnis im JSON-Format zu erhalten.

(.venv) $ speedtest --server 24333 --json

Ergebnis


{"download": 20208058.464686207, "upload": 54426180.687909536, "ping": 48.215, "server": {"url": "http://ookla.mbspeed.net:8080/speedtest/upload.php", "lat": "35.6833", "lon": "139.6833", "name": "Tokyo", "country": "Japan", "cc": "JP", "sponsor": "Rakuten Mobile , Inc", "id": "24333", "host": "ookla.mbspeed.net:8080", "d": 6.336536019993832, "latency": 48.215}, "timestamp": "2019-12-23T07:23:16.316637Z", "bytes_sent": 68534272, "bytes_received": 25353712, "share": null, "client": {"ip": "xx.xx.xx.xx", "lat": "xx.xxxx", "lon": "xxx.xxxx", "isp": "XXX", "isprating": "3.7", "rating": "0", "ispdlavg": "0", "ispulavg": "0", "loggedin": "0", "country": "JP"}}

Betrachten Sie dies in Python

Führen Sie Speedtest in Python aus

Da es als Python-Paket bereitgestellt wird, habe ich darüber nachgedacht, einen Geschwindigkeitstest in Python steckbar auszuführen, aber dieses Mal habe ich darüber nachgedacht, das Ausführungsergebnis in CUI so zu behandeln, wie es ist, also Geschwindigkeitstest mit "Subprozessmodul" Beschlossen, den Befehl auszuführen

Subprozess \ - \ - \ - Subprozessverwaltung - Python 3 \ .8 \ .1 Dokumentation

wifi_speedtest.py


def get_speedtest_result():
    process = subprocess.run(['speedtest', '--server', '24333', '--json'], capture_output=True)
    return json.loads(process.stdout)


def bit_to_mbit(bit):
    """
Ein Gefühl machen, das sich nicht um Fehler kümmert
    """
    return bit / 1024 / 1024


result = get_speedtest_result()
print(bit_to_mbit(result["download"]), bit_to_mbit(result["upload"]))

Ergebnis


13.46394215 50.48002296

Es gibt verschiedene Möglichkeiten, einen Befehl mit "subprocess" auszuführen, aber dieses Mal habe ich die Standardausgabe mit "run ()" + "capture_output = True" erhalten, die im Verwendungsbeispiel offiziell erwähnt wird.

Dieses Mal habe ich die SpreadSheet-API gedrückt, um sie aufzuzeichnen (Details werden unten weggelassen).

Sie können es zu Slack überspringen und es beliebig aufnehmen.


Abgesehen davon war die Verwendung der Pipenv-Skripte praktisch, da die virtuelle Umgebung bei der Ausführung von cron nicht aktiviert werden musste (Prozesse, die über pipenv run ausgeführt werden, werden genauso behandelt wie die Ausführung in einer virtuellen Umgebung).

Pipfile


[scripts]
dev = 'python wifi_speedtest.py'

Recommended Posts

Messen Sie die WLAN-Geschwindigkeit mit Python
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Beschleunigen Sie Python mit numba grob
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python
Twilio mit Python
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
So messen Sie die Ausführungszeit mit Python Teil 1
Explosive Geschwindigkeit mit Python (Flasche)! Web-API-Entwicklung
So messen Sie die Ausführungszeit mit Python Part 2
Messen Sie die CPU-Temperatur von Raspeye mit Python
Serielle Kommunikation mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Führen Sie Python mit VBA aus
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
Python ~ Grammatikgeschwindigkeit lernen ~
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten
Fahren Sie WebDriver mit Python
Verwenden Sie Mecab mit Python 3
[Python] Mit CGIHTTPServer umleiten
Sprachanalyse mit Python
Denken Sie an Yaml mit Python
Erste Schritte mit Python
Verwenden Sie DynamoDB mit Python
Zundko Getter mit Python
Behandle Excel mit Python
Ohmsches Gesetz mit Python
Primzahlbeurteilung mit Python