Python 在GUI事件循环和在多线程上运行的状态机之间共享数据的最简单方法是什么?

Python 在GUI事件循环和在多线程上运行的状态机之间共享数据的最简单方法是什么?,python,multithreading,pyqt,state-machine,Python,Multithreading,Pyqt,State Machine,我正在使用python和PyQt构建一个GUI应用程序,该应用程序还实现了有限状态机(FSM)。状态机负责处理设备(如摄像头)及其通信。所以,我的FSM的一个核心状态是“measure”,它从我想要向GUI报告的摄像头获取帧 我的第一个实现是简单地将所有内容放在同一个线程上,但是状态可能需要一段时间才能执行,这使得GUI没有响应;因此,我希望多线程应用程序,并将FSM放在自己的线程上;因此它不会阻止GUI事件循环 我很好地实现了这一点,但是编写一个新的状态代码有点笨拙。它需要将GUI中的信息传递

我正在使用python和PyQt构建一个GUI应用程序,该应用程序还实现了有限状态机(FSM)。状态机负责处理设备(如摄像头)及其通信。所以,我的FSM的一个核心状态是“measure”,它从我想要向GUI报告的摄像头获取帧

我的第一个实现是简单地将所有内容放在同一个线程上,但是状态可能需要一段时间才能执行,这使得GUI没有响应;因此,我希望多线程应用程序,并将FSM放在自己的线程上;因此它不会阻止GUI事件循环

我很好地实现了这一点,但是编写一个新的状态代码有点笨拙。它需要将GUI中的信息传递到状态机中,同时从事件循环控制状态机的队列,这并不太糟糕;然而,状态机随后必须报告GUI中显示的信息(例如来自摄像机的图像)

所以,现在我让所有这些数据在两个方向上流动(从事件循环/GUI进入SM,然后从SM返回GUI)。梯形图特别需要依赖于状态的数据解包(我并不总是连接摄像头/图像返回),这对于代码来说很笨拙

当我想到FSM的报告时,我正在做的主要事情是用来自FSM的数据更新GUI句柄;所以我想知道是否有一种方法可以将GUI句柄传递给FSM类;例如,我从不需要向GUI类报告图像?或者,对于从GUI类来回传递数据,是否有公认的最佳实践,尤其是GUI更新方法和GUI事件循环,以及FSM,在我的情况下,FSM控制设备和程序的中心逻辑(使用摄像头和压电马达的自适应反馈)