我有以下 python 脚本:
#! /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."
不幸的是,我对 python 不是很好。该脚本应该以某种方式是多线程的(但这在这个问题的范围内可能并不重要)。
令我困惑的是这gpsd.next()
条线。如果我做对了,它应该告诉脚本已经获取了新的 gps 数据并准备好读取。
但是,我使用无限循环读取数据,while True
暂停 1 秒time.sleep(1)
。
然而,这样做的原因是它有时会重复两次相同的数据(传感器在最后一秒没有更新数据)。我认为它也会以某种方式跳过一些传感器数据。
我可以以某种方式更改脚本以打印当前速度,而不是每秒打印一次,而是每次传感器报告新数据时?根据数据表,它应该是每秒(1 Hz 传感器),但显然它不完全是 1 秒,而是以毫秒为单位变化。