我正在研究一个代表空气质量站的 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()
命令都会挂起,因为附加线程挂起。
我查看了很多示例和文档,包括以下内容:
- https://docs.python.org/2/library/threading.html#thread-objects
- http://www.danmandle.com/blog/getting-gpsd-to-work-with-python/
- https://stackoverflow.com/a/6146351/3342427
任何其他资源或直接答案将不胜感激!