私は大気質ステーションを表す 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()
このコードに関する 2 つの問題/質問があります。
AirStation クラスの初期化関数で緯度と経度の読み取りを確実にする最善の方法は何ですか? 初期化時に、緯度と経度の値が None になっています (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
追加のリソースや直接の回答をいただければ幸いです。