【发布时间】:2016-09-01 14:32:10
【问题描述】:
我有一堆代码,我在这里附上一段。基本上我有一个线程 - 它针对一个函数 - 有一个 while 循环如下:
while not stop_event.wait(1): # Continuous Reading Function
#print "hello2"
#print ("working on %s" % arg)
data1 = Read(soa1, bytes1, ser)
data2 = Read(soa2, bytes2, ser)
data3 = Read(soa3, bytes3, ser)
data = np.concatenate([data1, data2, data3])
print data.size
queue_read.put(data)
time.sleep(1)
我正在通过此线程中的串行通信从 MCU 读取数据并将其发送回我的主程序 - 使用 queue_read.put(data)。此 while 每 1 秒运行一次。
在我的主程序中,我将该线程的输出读取为 ---
self.data = queue_read.get()
五分钟后,MCU 中的值被有意更改。在更改期间,此线程仍在运行,因为它处于 while 循环中。
所以五分钟后,变量“数据”应该有来自 MCU 的更新的新值。但令我惊讶的是,事实并非如此。它仍然具有初始值。我在这里有什么遗漏吗?使用队列是获取数据的正确方法吗?
【问题讨论】:
-
Queue是生产者/消费者线程的理想选择。但我们需要查看 OP 中的enter code here以提供帮助 -
@CraigBurgler 我编辑了这个问题。问题是 self.data 或变量“data”没有更新,因为一旦我的主程序通过代码行 self.data = queue_read.get(),它就不会再次读取。所以我想知道我应该如何能够连续地从线程中读取数据并更新我的 GUI
-
请看我的回答
标签: python multithreading variables queue pyserial