Internet Speedtest

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Donnerstag 22. Dezember 2016, 15:34

@noisefloor: was Kebap meint, ist, dass mit PEP 380 (Python 3.3) `yield from` zusammen mit Rückgabewerten von Generatoren eingeführt wurde. Es gibt also erst ab Python 3.3 ein `return something` wobei man das something normalerweise gar nicht zu sehen bekommt außer man geht einen Generator händisch mit `next` durch und fängt die StopIteration-Exception ab. Dafür, dass der Aufwand, an den Wert zu kommen so groß ist, wäre es deutlich klarer, diesen Umstand im Generator mit `raise StopIteration(something)` deutlich zu machen.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Freitag 23. Dezember 2016, 07:37

Vielen Dank!

Wenn ich bei laufender Messung den LTE-Stick abziehe stoppt die Ausgabe.
Ist es möglich eine Ausgabe wie Kein Stick oder bei keinem Netz 0 Kbit/s auszugeben?
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Freitag 23. Dezember 2016, 09:01

@Nr8: Dazu muß man ein/zwei Ebenen tiefer gehen, sich den Socket-Handle geben lasse, mit select mit timeout warten, bis wirklich Daten angekommen sind und diese mit recv lesen.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Freitag 23. Dezember 2016, 10:17

:K

Mit try: except in der while-schleife geht es nicht oder?
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Freitag 23. Dezember 2016, 10:27

@Nr8: nein, weil `read` so lange blockiert, bis es die gewünschte Anzahl an Bytes gelesen hat.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Freitag 23. Dezember 2016, 11:23

Sollte das, "
if not bytes_read:
return
",
das nicht auch abfangen???
Benutzeravatar
noisefloor
User
Beiträge: 1681
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Internet Speedtest

Beitragvon noisefloor » Freitag 23. Dezember 2016, 12:00

Hallo,

nein, weil wie Siriuis3 schon sagt: `read` blockiert, bis die angegebene Anzahl Bytes gelesen ist. Vorher wird die nächste Zeile nicht abgearbeitet.

Gruß, noisefloor
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 27. Dezember 2016, 06:54

Guten Morgen!

Habt ihr da vielleicht ein gutes Bespiel oder etwas ähnliches?
Ich verstehe einfach nicht wie das funktionieren soll.

Vielen Dank für eure tolle Hilfe!!!
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Dienstag 27. Dezember 2016, 10:46

@Nr8: ein Einstieg wäre die Dokumentation zu Sockets.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 27. Dezember 2016, 13:21

Ok danke!

Gucke ich mir später mal an.

Kann ich den Code von Sirius3 mit GPS-Daten verknüpfen?

Habe eine NAVILOCK GPS Maus.

Kann mir die GPS-Daten auch anzeigen lassen. Ich hätte die Daten aber gern gleichzeitig mit den Datenraten in einer CSV gespeichert.

  1. #! /usr/bin/python
  2. import os
  3. from gps import *
  4. from time import *
  5. import time
  6. import threading
  7.  
  8. gpsd = None #seting the global variable
  9.  
  10. os.system('clear') #clear the terminal (optional)
  11.  
  12. class GpsPoller(threading.Thread):
  13.   def __init__(self):
  14.     threading.Thread.__init__(self)
  15.     global gpsd #bring it in scope
  16.     gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
  17.     self.current_value = None
  18.     self.running = True #setting the thread running to true
  19.  
  20.   def run(self):
  21.     global gpsd
  22.     while gpsp.running:
  23.       gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
  24.  
  25. if __name__ == '__main__':
  26.   gpsp = GpsPoller() # create the thread
  27.   try:
  28.     gpsp.start() # start it up
  29.     while True:
  30.       #It may take a second or two to get good data
  31.       #print gpsd.fix.latitude,', ',gpsd.fix.longitude,'  Time: ',gpsd.utc
  32.  
  33.       os.system('clear')
  34.  
  35.  
  36.       print 'latitude    ' , gpsd.fix.latitude
  37.       print 'longitude   ' , gpsd.fix.longitude
  38.       print 'speed (m/s) ' , gpsd.fix.speed
  39.       time.sleep(5) #set to whatever
  40.  
  41.   except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
  42.     print "\nKilling Thread..."
  43.     gpsp.running = False
  44.     gpsp.join() # wait for the thread to finish what it's doing
  45.   print "Done.\nExiting."
Zuletzt geändert von BlackJack am Dienstag 27. Dezember 2016, 14:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 32517
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Dienstag 27. Dezember 2016, 14:49

@Nr8: `gpsd` und `gpsp` sind sich sehr ähnliche kryptische Abkürzungen die mich zumindest mindestens einmal beim lesen durcheinander gebracht haben. ``global`` hat in sauberen Programmen nichts zu suchen und Funktionen und Methoden sollten nichts mit Werten machen (ausser Konstanten) die sie nicht als Argumente übergeben bekommen haben. Deine Klasse ist *so* verdammt *keine* Klasse. Klassen sollen Daten kapseln und nicht sowohl ausserhalb Werte neu zuweisen und dann auch noch auf dem eigenen, modulglobalen Exemplar etwas machen. Das kann man ohne so eine ”Klasse” weniger verworren ausdrücken und *mit* einer *echten* Klasse, wahrscheinlich nachvollziehbarer.

Bei Programmen die den Terminalinhalt ungefragt löschen, bekommen viele Benutzer übrigens Hassgefühle. Üblicherweise geht man nämlich davon aus das die Sachen dort stehen bleiben und man da später nochmal im Terminalpuffer hochscrollen kann und nachlesen kann was da steht.

In der ersten Zeile das Leerzeichen zwischen #! und /usr… gehört dort nicht hin.

Sternchenimporte sollte man vermeiden. Damit holt man sich alle Namen aus einem Modul in den aktuellen Modulnamensraum. Weisst Du welche das bei `gps` und `time` sind? Sind die alle unterschiedlich? Und verdecken auch keine eingebauten Namen? Könntest Du bei einem grösseren Programm bei mehreren Sternchenimporten sagen wo welcher Name ursprünglich her kommt?

Zur Frage: Ja man kann Code schreiben der mit Hilfe des `gps`-Moduls die aktuelle Position erfragt und mit in die Messdaten aufnimmt. Dazu müsste man sich überlegen wie man *sinnvoll* eine Klasse schreibt von der man die aktuellen Daten erfragen kann, und dann beispielsweise in der Schleife in der Hauptfunktion von Sirius3's Programm vor jeder Ausgabe auch die Koordinaten abfragt und mit ausgibt.
“There are only two industries that refer to their customers as users.” — Edward Tufte
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Dienstag 27. Dezember 2016, 17:03

Könnt ihr mir dabei vielleicht helfen?

Ich finde leider keinen Ansatz wie ich das ganze umsetzen soll.

:K :?:
Sirius3
User
Beiträge: 5941
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Mittwoch 28. Dezember 2016, 11:32

@Nr8: wenn Du keinen Ansatz findest, solltest Du nochmal ein paar Schritte zurück gehen, und anfangen die Grundlagen von Python zu lernen. Einfach irgendwelchen Code aus dem Internet zusammenzukopieren und dann zu hoffen, dass irgendjemand ein fertiges Programm daraus macht, funktioniert nicht. Was für einen Ansatz brauchst Du denn?
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 4. Januar 2017, 08:11

Ich versteh nicht ganz wie ich das mit dem return mache.

Wenn ich eine Funktion z.B.

  1. from gps Import*
  2.  
  3. session =gps()
  4. session.stream(WATCh_ENABLE|WATCH_NEWSTYLE)
  5.  
  6. def position():
  7.     lat = 0
  8.     lon = 0
  9.     while True:
  10.              report=session.next()
  11.              if report.keys()[0]=='exp' :
  12.                     lat = float(report['lat'])
  13.                     lon = float(report['lon'])
  14.              return lat, lon
  15.  


gebe ich die Werte so richtig zurück?
Zuletzt geändert von BlackJack am Mittwoch 4. Januar 2017, 09:56, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 1681
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Internet Speedtest

Beitragvon noisefloor » Mittwoch 4. Januar 2017, 08:28

Hallo,

du bekommst so auf jeden Fall `lat` und `lon` zurück. Entweder beide mit 0 oder beide mit einen Wert, wenn `if report.keys()[0]=='exp'` True ist.

Das `while True` macht aber so keine Sinn, weil der folgende Codeblock immer nur 1x durchlaufen wird, weil das `return` am Ende auf jeden Fall erreicht wird. Bist du sicher, dass die Einrückungen so korrekt sind wie hier gepostet?

Gruß, noisefloor

Zurück zu „Netzwerkprogrammierung“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder