我正在使用Python GUI测试设备。尽管我以前很少使用Python,但是我已经能够使我的GUI正常工作。我的GUI通过串行连接发送和接收来自设备的所有命令。当前,当串行连接启动时,将创建一个单独的线程,该线程紧密轮询serial.readline()并将数据(经过一些解析后)发送回主GUI。在主GUI中,我具有路由功能,可将数据发送到需要数据的适当位置。这可以满足我的所有需求,除非需要运行大型脚本,而大型脚本需要从脚本中调用读取和写入命令。只需按一下按钮即可将当前正在使用的功能写入设备,然后功能结束。其中,main决定对数据进行的处理完全是一个单独的过程。但是,我有几个函数可以运行更长的脚本,而这些脚本必须在单独的线程上运行,否则它们将阻止GUI响应。现在这是我遇到的问题。由于我有一个线程紧密轮询串行连接,而且我不知道一种直接在线程之间进行通信的方法(即根据需要将串行线程读取和解析的数据直接发送到脚本线程),所以我没有办法以便将数据从main获取到我需要脚本中的值的位置。当前,我在脚本运行时暂时禁用串行读取线程,并尝试从线程内进行所有serial.read()和serial.write()调用,但这似乎是解决此问题的一种非常无效的方法。我在这里的问题是:是否应该考虑一个更好的软件结构来解决这个问题,是否有一个我不知道的更好的方法(我来自C ++背景)在Python中实现?目前正在为我的问题做最好的解决方案?
不幸的是,由于个人限制,我无法发布代码,但是任何形式的帮助将不胜感激。
答案 0 :(得分:-1)
看看this stackoverflow question。 它建议使用队列在线程之间进行通信。 这是一个使用方法的示例:
import threading, Queue
def func1(num, q):
while num < 100000000:
num = num**2
q.put(num)
def func2(num, q):
while num < 100000000:
num = q.get()
print num,
num = 2
q = Queue.Queue()
thread1 = threading.Thread(target=func1,args=(num,q))
thread2 = threading.Thread(target=func2,args=(num,q))
thread1.start()
thread2.start()
编码愉快!