2016-05-22 13 views
0

私は、Pythonを使ってGPSDポーリングを実施しています https://gist.github.com/wolfg1969/4653340http://www.catb.org/gpsd/client-howto.html#_python_examplesPythonの非スレッドプールのGPSD使い方は

は、私がここでコードを使用傾ける理由があります私は自分のシステムで約10個のプロセスをデーモン化しなければならないので、簡単な実装のためにcatbに行きます。

次のコードで2サイクル後に停止する理由について質問がありますか?どのように私はこれを修正することができますか?ありがとう。

def GpsDetection(): 

global gpsd 
gpsd = gps(mode=WATCH_ENABLE) 

try: 
    while 1: 
     # Do stuff 
     report = gpsd.next() 
     # Check report class for 'DEVICE' messages from gpsd. If we're expecting messages from multiple devices we should 
     # inspect the message to determine which device has just become available. But if we're just listening 
     # to a single device, this may do. 
     print report 
     if report['class'] == 'DEVICE': 
      # Clean up our current connection. 
      gpsd.close() 
      # Tell gpsd we're ready to receive messages. 
      gpsd = gps(mode=WATCH_ENABLE) 
     # Do more stuff 
     print "GPSD Data is showing now!!!!!!!!!!!!!!!!!!!!!!!!!!!!" 
     print datetime.datetime.now() 
     print 'latitude ' , gpsd.fix.latitude 
     print 'longitude ' , gpsd.fix.longitude 
     print 'time utc ' , gpsd.utc,' + ', gpsd.fix.time 
     print 'altitude (m)' , gpsd.fix.altitude 
     print 'eps   ' , gpsd.fix.eps 
     print 'epx   ' , gpsd.fix.epx 
     print 'epv   ' , gpsd.fix.epv 
     print 'ept   ' , gpsd.fix.ept 
     print 'speed (m/s) ' , gpsd.fix.speed 
     print 'climb  ' , gpsd.fix.climb 
     print 'track  ' , gpsd.fix.track 
     print 'mode  ' , gpsd.fix.mode 
     print     
     print 'sats  ' , gpsd.satellites 

     time.sleep(1) 
except StopIteration: 
    print "GPSD has terminated" 

return 

答えて

1

質問のため、低速または低速のgpsロケーション要件のためにgpsdからJSONデータをスレッドする方法が不思議でした。クライアントはGPSDと通信ソケットがいっぱいになると

、読み取りまたは投棄されていない、GPSDは、そのソケットを閉じます。

私は多くが1秒間に4800baudで発生する可能性が言われています。デーモンがフルバッファーを約8〜15秒で諦めるのは驚くことではありません。

私はa threading shim for a Python 2-3 gpsd client

こと、およびthe python clientを書いて、何も他の意志ならば、それを遅くするメカニズムや睡眠をインポートする必要があります。

from time import sleep 
from agps3threaded import AGPS3mechanism 

agps_thread = AGPS3mechanism() # Instantiate AGPS3 Mechanisms 
agps_thread.stream_data(host='192.168.0.4') # From localhost(), or other hosts, by example, (host='gps.ddns.net') 
agps_thread.run_thread(usnap=.2) # Throttle the time to sleep after an empty lookup, default 0.2 two tenths of a second 

while True: # All data is available via instantiated thread data stream attribute. 
# line #140-ff of /usr/local/lib/python3.5/dist-packages/gps3/agps.py 
    print('-----') 
    print(agps_thread.data_stream.time) 
    print('Lat:{}'.format(agps_thread.data_stream.lat)) 
    print('Lon:{}'.format(agps_thread.data_stream.lon)) 
    print('Speed:{}'.format(agps_thread.data_stream.speed)) 
    print('Course:{}'.format(agps_thread.data_stream.track)) 
    print('-----') 
    sleep(30) 

これは、スレッド化されたgpsdデータの問題を解決します。

あなたはについてのコードは、どこが破損したり停止しなかった動作していない理由を知りたい場合は

、およびエラーメッセージが何でしたか?

関連する問題