`lat`, `lon`, und `speed` am Ende der Schleife an 0 zu binden hat keinen Effekt, weil diese Werte nie benutzt werden.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
import time
import urllib
from datetime import datetime as DateTime
from gps import gps, WATCH_ENABLE, WATCH_NEWSTYLE
SPEED_TEST_URL = 'http://www.speedtestx.de/testfiles/data_500mb.test'
def get_latest_position(gps_session, previous_position):
position = previous_position
while gps_session.waiting():
data = next(gps_session)
if 'lat' in data:
position = (data['lat'], data['lon'], data['speed'])
return position
def measure(url=SPEED_TEST_URL, intervall=2, size=10):
response = urllib.urlopen(url)
for _ in range(1):
time_start = time_end = time.time()
amount = 0
while time_end - time_start < intervall:
bytes_read = len(response.read(size))
if not bytes_read:
return
time_end = time.time()
amount += bytes_read
yield amount, time_end - time_start
def main():
session = gps()
session.stream(WATCH_ENABLE | WATCH_NEWSTYLE)
try:
for amount, time_delta in measure(size=1000, intervall=2):
#
# FIXME Sehr wahrscheinlich soll hier nicht immer (0, 0, 0)
# übergeben werden.
#
lat_lon_speed = get_latest_position(session, (0, 0, 0))
lat, lon, speed = lat_lon_speed
print(
';'.join(
[
format(DateTime.now(), '%H:%M:%S'),
format(amount / time_delta / 1024, '.3f'),
str(lat),
str(lon),
str(speed),
]
)
)
time.sleep(2)
except (IndexError, IOError):
return
if __name__ == '__main__':
main()