我还没有找到任何gpsd示例,它们不执行与Python GPS Module: Reading latest GPS Data类似的操作。使用多处理,我编写了一个处理从设备读取gps数据的进程,其中包含以下inside run()。注意,我希望能够停止这个过程,这样我就不能只使用gps会话的next()函数,因为它是一个阻塞调用:
# connect to gpsd
g = gps.gps('127.0.0.1',2947)
g.stream(gps.WATCH_ENABLE)
while True:
try:
if poisonpillq.get_nowait() == '!STOP!': break
except Queue.Empty:
if g.waiting():
rpt = g.next()
if rpt['class'] == 'TPV':
--- store_gps_data from rpt/g ---
这样的话,我的CPU就达到100%。使用xpgs程序测试CPU使用率时,CPU的使用率最高达到15%。那么如何规避这种用法呢?在
增加“投票”时间可以减少使用量。像这样:
当轮询时间为0.5时,CPU使用率永远不会超过20%。当轮询时间为3.0时,CPU使用率最高可达17%左右。在
这不是一个完美的解决方案。由于gps传输是串行的,进程在毒丸队列上阻塞的时间越长,需要读取的数据就越多,这意味着在gps进程获得毒丸之前,调用者可能需要等待“很长”时间。另外,是否有可能总是有数据,而gps进程永远不会得到毒丸队列?在
相关问题 更多 >
编程相关推荐