Internet Speedtest

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

Re: Internet Speedtest

Beitragvon Sirius3 » Mittwoch 4. Januar 2017, 09:54

@Nr8: *-Importe sind schlecht und »import« schreibt man klein. Eingerückt wird immer mit 4 Leerzeichen pro Ebene und nicht mal mit 3 und mal mit 6. Wörterbücher sind ungeordnet. Dass der erste Schlüssel »exp« heißt, ist rein zufällig. Korrekt wäre »if 'exp' in report«. »exp« kommt da aber nie vor, höchstens »epx«, aber warum prüfst Du nicht gleich auf das Vorhandensein von »lat« oder »lon«?

Du willst ja zwei Dinge parallel machen, die Geschwindigkeit einer Verbindung testen und den Ort bestimmen. Ich weiß jetzt nicht, ob die next Methode instantan Werte liefert, ob Du den letzten gültigen Wert benutzen willst, oder warten willst, bis die nächste gültige Postion geliefert wird.

Für den Fall, dass man mit dem letzten gültigen Wert arbeiten will:
  1. def get_latest_position(gps_session, last_position):
  2.     position = last_position
  3.     while gps_session.waiting():
  4.         data = next(gps_session)
  5.         if 'lat' in data:
  6.             position = (data['lat'], data['lon'])
  7.     return position
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

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

Danke für die Hilfe!

Wenn ich mir jetzt die position mit print in der main ausgeben lassen möchte, kommt ein NameErrror: global Name 'position' is not defined
Sirius3
User
Beiträge: 5427
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Mittwoch 4. Januar 2017, 12:17

@Nr8: das ist ja auch nur eine lokale Variable der Funktion »get_latest_position«.
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 4. Januar 2017, 12:38

Muss ich die also mit global position angeben?
Sirius3
User
Beiträge: 5427
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Mittwoch 4. Januar 2017, 12:48

@Nr8: müßte man position global machen, hätte ich das ja gemacht. Nein, Du mußt etwas mit dem Rückgabewert der Funktion machen.
Benutzeravatar
BlackJack
Moderator
Beiträge: 31418
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Mittwoch 4. Januar 2017, 12:49

@Nr8: Nein, das ist ja auch der Rückgabewert. Den musst Du ausgeben. Gegebenenfalls vorher in der `main()` an einen lokalen Namen binden. Vergiss das es ``global`` gibt.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 4. Januar 2017, 13:24

Also in der main()

latlon = get_latest_position(???????)
Zuletzt geändert von Nr8 am Mittwoch 4. Januar 2017, 13:44, insgesamt 1-mal geändert.
Benutzeravatar
BlackJack
Moderator
Beiträge: 31418
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Mittwoch 4. Januar 2017, 13:40

@Nr8: An Stelle der Fragezeichen musst Du natürlich noch die GPS-Sitzung und einen passenden Wert für die letzte Position übergeben. Zum Beispiel `None`, oder ein Tupel mit jeweils `None` für Länge und Breite, oder… — das kommt darauf an wie Du beim Aufrufer mit diesem Fall umgehen möchtest das die Funktion keine neue Position ermitteln kann.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 4. Januar 2017, 14:04

Ok hab jetzt latlon = get_latest_position(session, None)

Der erste Test hat geklappt.

Vielen Dank!
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Mittwoch 4. Januar 2017, 14:51

Habt ihr vielleicht noch eine Idee warum er die Werte immer in Klammern ausgibt?
Benutzeravatar
BlackJack
Moderator
Beiträge: 31418
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Mittwoch 4. Januar 2017, 14:56

@Nr8: Ja. Weil Du *einen* Wert ausgibst, nämlich das Tupel. Und Tupel werden in der Zeichenkettendarstellung mit runden Klammern repräsentiert. Wenn Du die Werte *in* dem Tupel anders darstellen möchtest, dann musst Du das explizit selber tun. Also selbst eine Zeichenkette erstellen die die beiden Werte so enthält wie Du sie gerne hättest. Das geht beispielsweise mit der `format()`-Methode auf Zeichenketten.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Donnerstag 5. Januar 2017, 10:41

habe die Daten jetzt ganz einfach getrennt indem ich " lat, lon = latlon geschrieben habe.

Bekomme leider manchmal eine Fehlermeldung.

Traceback (most recent call last):
File "./vartest.py", line 67, in <module>
main()
File "./vartest.py", line 52, in main
lat, lon = latlon
ValueError: too many values to unpack


habe mir latlon mal ausgeben lassen und da kommt manchmal als Ausgabe

Time: (nan)
Lat/Lon: 0.000000 0.000000
Altitude: ?
Speed: ?
Track: ?
Status: STATUS_NO_FIX
Mode: MODE_NO_FIX
Quality: 0 p=0.00 h=0.00 v=0.00 t=0.00 g=0.00
Y: 0 satellites in view:

Habt ihr nen Plan wie ich den Fehler umgehen kann und warum der Fehler kommt?
Zuletzt geändert von Nr8 am Donnerstag 5. Januar 2017, 10:58, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 5427
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Internet Speedtest

Beitragvon Sirius3 » Donnerstag 5. Januar 2017, 10:47

@Nr8: wie sieht denn nun Dein Programm aus?
Nr8
User
Beiträge: 42
Registriert: Mittwoch 21. Dezember 2016, 08:43

Re: Internet Speedtest

Beitragvon Nr8 » Donnerstag 5. Januar 2017, 11:07

  1. #!/usr/bin/python
  2. import urllib
  3. import time
  4. from datetime import datetime as DateTime
  5. import subprocess
  6. import sys
  7. import os
  8. from gps import*
  9.  
  10. session =gps()
  11. session.stream(WATCH_ENABLE|WATCH_NEWSTYLE)
  12.  
  13.  
  14. def get_latest_position(gps_session, last_position):
  15.     position = last_position
  16.     while gps_session.waiting():
  17.         data = next(gps_session)
  18.         if 'lat' in data:
  19.             position = (data['lat'], data['lon'], data['speed'])
  20.     return position
  21.  
  22.    
  23. def measure(url="http://www.speedtestx.de/testfiles/data_500mb.test", intervall=2, size=10):
  24.     response = urllib.urlopen(url)
  25.     for _ in range(1):
  26.         time_start = time_end = time.time()
  27.         amount = 0
  28.  
  29.         while time_end - time_start < intervall:
  30.             bytes_read = len(response.read(size))
  31.             if not bytes_read:
  32.                 return
  33.             time_end = time.time()
  34.             amount += bytes_read
  35.         yield amount, time_end - time_start
  36.  
  37.  
  38.  
  39. def main():
  40.  
  41.     try:
  42.         for amount, time_delta in measure(size=1000, intervall=2):
  43.            
  44.             latlonspeed = get_latest_position(session, session)
  45.             lat, lon, speed = latlonspeed
  46.            
  47.             print "{0:%H:%M:%S}; {1:.3f};".format(DateTime.now(), amount/time_delta / 1024), ";", lat, ";" , lon, ";", speed
  48.             lon = 0
  49.             lat = 0
  50.             speed = 0
  51.             time.sleep(2)
  52.     except IndexError:
  53.         return
  54.     except IOError:
  55.         return
  56. if __name__ == '__main__':
  57.     main()
  58.  
Zuletzt geändert von BlackJack am Donnerstag 5. Januar 2017, 11:10, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
BlackJack
Moderator
Beiträge: 31418
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: Internet Speedtest

Beitragvon BlackJack » Donnerstag 5. Januar 2017, 11:19

@Nr8: Bei `get_latest_position()` wird als zweites Argument ja auch nicht die letzte bekannte Position übergeben, sondern völlig unsinnigerweise nochmal das `session`-Objekt. Das übrigens auch nicht auf Modulebene definiert werden sollte, sondern in die Hauptfunktion gehört.
“A lesson I've learned over and over is that computer programs live far longer than you expect. It pays to do 'em better at the beginning, 'cause you're likely to live with them quite a while.” — Cameron Laird in c.l.p

Zurück zu „Netzwerkprogrammierung“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder