pyqt: 关于近期遇到的多线程问题+多线程方案

2 篇文章 0 订阅

问题描述:

写了一个小应用,有两个控件一个播放摄像头视频,一个固定时间间隔显示的算法检测过的图片(图片实时从摄像头读取)。

最开始做的方案是:一个线程负责采集摄像头的图像数据流,

                                        一个线程负责把数据流的图片显示到控件上,

                                        在主线程进行算法运算。

但是,每次主线程做算法运算的时候显示控件就会卡顿。

这里主线程做了两件事,一件是负责了主逻辑和算法模型的计算。

因此,博主做了另外一个方案:

单独做一个线程负责算法的计算,把显示的QT程序和主逻辑放到了主线程上,想通过把显示作为主线程来解决卡顿问题。

结果还是不行,运算的时候显示控件仍然会卡。

解决方式和原因:

最后博主对数据流进行追踪,去找显示控件是卡在哪一步了,追踪发现显示控件卡在update之前,这意味着图像数据一直在更新,

同时也生成了图片,就是没有显示,博主在查阅了多方资料后猜测可能是PyQt在使用多线程的时候资源分配不平衡,同时得知PyQt的GUI程序是不会在同一时间出现两个线程同时运行,而是不同的线程之间轮流交换python解释器的控制权,在同一个线程之中QT程序比python代码更具优先使用权,除非在不同线程中,那么问题就好解释了虽然显示程序和主逻辑在同一个线程中,但是主逻辑存在大量定时器和循环,在逻辑进入耗时代码的时候,解释器的控制权无法回到显示程序的手上。

解决方法是把所有耗时程序都放到多线程中运行,只留下显示控件的代码作为主线程。

参考来源

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值