我之前是搞嵌入式的,现在要写一个上位机,选择使用 Python+PyQt5 来完成。我的程序有两个执行线程以及一个主线程,主线程初始化完两个执行线程之后,一个执行线程进行串口的数据交互,另一个线程执行一个比较耗时的操作( OpenCV 图像处理),完全占满 CPU 。 这两个线程都是使用 QThread 来完成的,现在遇到了一个问题:图像处理线程长时间的计算,会导致串口线程出现响应变慢的现象(串口丢包导致通信失败),与此同时主线程的 UI 操作也会卡顿。 下面是部分代码(版面原因,部分无用代码已删除)。
这个程序里只有一个已知的耗费时间的代码(在下面程序中用image_proc表示),删掉这个函数程序便会变回正常速度。
class MainWindowClass(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindowClass, self).__init__() # 初始化父类
self.setupUi(self) # 初始化窗口
self.imgProcTrd = ThreadImageProc(op_param, op_cam_idx) # 创建图像处理线程
self.imgProcTrd.signalImageSend.connect(self.callback_image_display) # 连接回传到 GUI 的事件
self.serialCommTrd = ThreadSerialComm() # 创建串口通信线程
self.serialCommTrd.signalSerialStatus.connect(self.callback_serial_event)
class ThreadImageProc(QThread):
#