Python gps阅读器占用100%的CPU

2024-05-14 19:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我还没有找到任何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%。那么如何规避这种用法呢?在


Tags: 数据示例dataif进程cpulatestgps
1条回答
网友
1楼 · 发布于 2024-05-14 19:54:48

增加“投票”时间可以减少使用量。像这样:

# connect to gpsd
g = gps.gps('127.0.0.1',2947)
g.stream(gps.WATCH_ENABLE)

while True:
    try:
         if poisonpillq.get(True,polltime) == '!STOP!': break
    except Queue.Empty:
        while g.waiting():
            rpt = g.next()
            if rpt['class'] == 'TPV':
                 - store_gps_data from rpt/g  -

当轮询时间为0.5时,CPU使用率永远不会超过20%。当轮询时间为3.0时,CPU使用率最高可达17%左右。在

这不是一个完美的解决方案。由于gps传输是串行的,进程在毒丸队列上阻塞的时间越长,需要读取的数据就越多,这意味着在gps进程获得毒丸之前,调用者可能需要等待“很长”时间。另外,是否有可能总是有数据,而gps进程永远不会得到毒丸队列?在

相关问题 更多 >

    热门问题