我使用多个线程从不同采集率的多个传感器中提取数据。我有一台30Hz的摄像机和一台200Hz的多轴IMU。在收集数据的方法中,我做了一些基线处理,并将数据推送到队列中以供主代码使用。
我从以下开始我的主要内容。 camq,inerq和plotq都是Queue.Queue()对象。 cammer,惯性和绘图仪都是无限循环收集数据并将其推入队列的方法。
t1 = Thread(target=cammer, args = (camq,))
t2 = Thread(target = inertial, args = (inerq,))
t3 = Thread(target = plotter, args = (plotq,))
t1.setDaemon(True)
t2.setDaemon(True)
t3.setDaemon(True)
t1.start()
t2.start()
t3.start()
我的应用程序的关键值是IMU值。因此,在我的主代码中的无限循环中,调步项是读取这些值的队列。我的问题是我不想在代码继续执行之前等待相机队列填充。因此,我在主要代码中完成了以下操作:
while True:
result = inerq.get() #Get the inertial data as it comes
#Many lines of inertial processing code
if not camq.empty(): #Check if the camera queue is empty
if camq.get_nowait() >297 and camq.get_nowait() <303: #If it isn't empty poll it to see if it meets the criteria.
#Many lines of kalman filtering
我想使用queue.get_nowait(),所以我不会坐在那里等待我的相机数据,这比IMU数据慢得多。当我这样做时,我得到queue.empty,所以我用上面的queue.empty()查询来处理它。
当我这样做时,我得到错误&#34;主线程不在主循环中#34;。值得注意的是,如果我只是这样做:
if camq.get() >297 and camq.get() <303: #Poll the camera data
#Many lines of kalman filtering
代码运行完美,但速度慢得多,因为它等待每个循环的摄像机数据。
有人可以给我一个策略或见解,让我不会等待&#34;对于摄像机队列?