2017-03-13 33 views
1

我正在嘗試使用gpsd庫來解碼一些非標準AIS(附加信息標記的nmea字符串串)數據。 AIS數據是從不斷增加的文本文件中讀取的(每天一個,新行是新數據)。一些處理是在python中完成的,然後推送到GPSD解碼器進行解碼並返回到python以進行更多工作。目前,這是通過使用做使用os.system或subprocess.check_output(它們都採取相同的時間量)用命令:PYTHON,LINUX:流入和流出cmdline

echo "single_nmea_string" | gpsdecode 

這工作,但它是痛苦的緩慢。如果我寫的所有NMEA串到一個文本文件,然後執行批量解碼它的速度更快的10-50倍:

cat all_processed_nmea_strings.txt | gpsdecode 

但因爲我需要儘快處理傳入的數據這不能實時工作儘可能。

有沒有辦法在Python中打開一個管道到gpsdecode(或任何其他cmdline工具),在準備好的時候發送nmea_strings並讀取結果,而不必一直啓動/停止工具?我已經在隊列中使用多處理來加速處理,但瓶頸在於解碼位。

任何想法?

編輯: 進一步的測試表明,「慢度」可能不會與cmdline解碼。這可能是我在工人之間分配數據的地方。將需要做一些分析。

回答

1

我覺得subprocess.Popen是稍顯不便在你的情況下使用:你不能用communicate(),因爲它會等待子進程結束,所以你必須要處理的文件描述符,並採取不灌裝管道緩衝區的照顧。有些想法參見this question

更好的選擇恕我直言,是使用pexpect package

+0

得到這個工作,但它沒有顯示任何改善。我認爲這個問題可能在腳本的其他地方?這可能與我在流程工作者之間分裂數據的方式有關。感謝您的幫助,當我認爲我知道問題所在時,這正是我一直在尋找的工具。 – RedM