我正在尝试使用gpsd库解码一些非标准 AIS(带有额外信息标记的 nmea 字符串)数据。AIS 数据是从一个不断增加的文本文件中读取的(每天一个,换行符是新数据)。一些处理在 python 中完成,然后推送到 GPSD 解码器进行解码并返回给 python 进行更多工作。目前这是使用 os.system 或 subprocess.check_output (它们都花费相同的时间)和命令完成的:
echo "single_nmea_string" | gpsdecode
这行得通,但速度很慢。如果我将所有 NMEA 字符串写入文本文件并进行批量解码,它的速度会快 10-50 倍:
cat all_processed_nmea_strings.txt | gpsdecode
但这不能实时工作,因为我需要尽快处理传入的数据。
有没有办法在 Python 中打开 gpsdecode(或任何其他 cmdline 工具)的管道,在 nmea_strings 准备好时将其发送并读取结果,而无需一直启动/停止该工具?我已经在使用带队列的多处理来加快处理速度,但瓶颈是解码位。
有任何想法吗?
编辑:进一步的测试表明,“缓慢”可能与 cmdline 解码无关。这可能是我在工作人员之间拆分数据的地方。需要做一些分析。