Ich habe folgende Python-Skript:Kann ich irgendwie die Verwendung von time.sleep() in diesem Skript vermeiden?
#! /usr/bin/python
import os
from gps import *
from time import *
import time
import threading
import sys
gpsd = None #seting the global variable
class GpsPoller(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
global gpsd #bring it in scope
gpsd = gps(mode=WATCH_ENABLE) #starting the stream of info
self.current_value = None
self.running = True #setting the thread running to true
def run(self):
global gpsd
while gpsp.running:
gpsd.next() #this will continue to loop and grab EACH set of gpsd info to clear the buffer
if __name__ == '__main__':
gpsp = GpsPoller() # create the thread
try:
gpsp.start() # start it up
while True:
print gpsd.fix.speed
time.sleep(1) ## <<<< THIS LINE HERE
except (KeyboardInterrupt, SystemExit): #when you press ctrl+c
print "\nKilling Thread..."
gpsp.running = False
gpsp.join() # wait for the thread to finish what it's doing
print "Done.\nExiting."
ich mit Python bin nicht sehr gut, leider. Das Skript sollte irgendwie multithread sein (aber das ist wahrscheinlich nicht wichtig im Rahmen dieser Frage).
Was mich verwirrt ist die gpsd.next()
Linie. Wenn ich es richtig verstanden habe, sollte es dem Skript mitteilen, dass neue GPS-Daten erfasst wurden und bereit sind, gelesen zu werden.
Allerdings lese ich die Daten mit der unendlichen while True
Schleife mit einer 1 Sekunde Pause mit time.sleep(1)
.
Was dies jedoch ist, ist, dass es manchmal die gleichen Daten zweimal wiederholt (der Sensor hat die Daten in der letzten Sekunde nicht aktualisiert). Ich denke, es überspringt auch irgendwie Sensordaten.
Kann ich irgendwie das Skript ändern, um die aktuelle Geschwindigkeit nicht jede Sekunde zu drucken, aber jedes Mal, wenn der Sensor neue Daten meldet? Laut Datenblatt sollte es jede Sekunde sein (ein 1 Hz Sensor), aber offensichtlich ist es nicht genau 1 Sekunde, sondern variiert in Millisekunden.
https://gist.github.com/anonymous/11833e5d6ad5af1f5324639e33c02a73 –