我正在开发一个python类,它代表一个空气质量站。每个空气质量站都有一个与之相关的GPS,这样我们就可以识别出该站的纬度和纵向坐标。GpsPoller在一个单独的线程上被调用,并持续运行,直到线程被终止。GpsPoller应用于获取任何给定时间的最新GPS数据。在
以下是我目前所做的:
class AirStation:
def __init__(self):
if not self._init_station():
raise InitException("Could not initialize the AirStation!")
def _init_station(self):
self._id = utils.get_mac('wlan0')
self._gpsp = utils.GpsPoller()
self._gpsp.start() # start polling the GPS sensor
self._lat = self._gpsp.get_gps_data()
self._lon = self._gpsp.get_gps_data()
return True
class GpsPoller(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.session = gps(mode=WATCH_ENABLE)
self.current_value = None
self.running = True
def get_gps_data(self):
return self.current_value
def run(self):
while self.running:
self.current_value = self.session.next()
关于这个代码,我有两个问题:
在AirStation类初始化功能中,确保纬度和纵向读数的最佳方法是什么?在初始化时,我得到的是一个纬度和纵向值为无(我怀疑是由于时间不够,GPS不得不获得卫星定位)。
确保GpsPoller与AirStation实例一起终止的标准方法是什么?每当我在命令行进行测试时,exit()
命令都会挂起,因为附加线程会挂起。
我已经看了很多示例和文档,包括以下内容:
任何额外的资源或直接回答将不胜感激!在
我相信我已经找到了最好的解决办法,我在上面张贴的问题。以下是我的想法:
GPS模块需要足够的时间来定位卫星。没有办法加快这个过程(至少为了这个应用程序)。从我的实验来看,我使用的GPS模块在大约4-5秒内返回所有的GPS修正。在
为了回答我的第一个问题,确保在初始化AirStation对象时获得纬度和纵向坐标的最佳方法是在启动GpsPoller后等待几秒钟。
确保GpsPoller线程终止的最佳方法是通过设置self终止循环条件_gpsp.正在运行在父进程中为False,然后等待线程使用self与父线程重新连接_gpsp.join(). 在
这些操作可以放在close()方法中,该方法应该在station对象的生命周期结束时调用。
比如:
相关问题 更多 >
编程相关推荐