加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – pyqt QThread阻塞主线程

发布时间:2020-12-20 13:38:34 所属栏目:Python 来源:网络整理
导读:我正在尝试创建一个简单的线程应用程序,我有一个方法,它做了一些长处理和一个显示加载栏和取消按钮的小部件. 我的问题是,无论我如何实现线程,它实际上都没有线程 – 一旦线程启动,UI就会被锁定.我已阅读每个教程并发布有关此内容的信息,我现在正在求助社区我
我正在尝试创建一个简单的线程应用程序,我有一个方法,它做了一些长处理和一个显示加载栏和取消按钮的小部件.

我的问题是,无论我如何实现线程,它实际上都没有线程 – 一旦线程启动,UI就会被锁定.我已阅读每个教程并发布有关此内容的信息,我现在正在求助社区我试着解决我的问题,因为我不知所措!

最初我尝试了继承QThread,直到互联网说这是错误的.然后我尝试了moveToThread方法,但它没有区别.

初始化代码:

loadingThreadObject = LoadThread(arg1)
loadingThread = PythonThread()
loadingThreadObject.moveToThread(loadingThread)
loadingThread.started.connect(loadingThreadObject.load)
loadingThread.start()

PythonThread类(显然QThreads在pyQt中被窃听并且除非你这样做否则不启动):

class PythonThread (QtCore.QThread):
    def __init__(self,parent=None):
        QtCore.QThread.__init__(self,parent)

    def start(self):
        QtCore.QThread.start(self)

    def run(self):
        QtCore.QThread.run(self)

LoadThread类:

class LoadThread (QtCore.QObject):
    results = QtCore.Signal(tuple)

    def __init__ (self,arg):
         # Init QObject
         super(QtCore.QObject,self).__init__()

         # Store the argument
         self.arg = arg

    def load (self):
         #
         # Some heavy lifting is done
         #

         loaded = True
         errors = []

         # Emits the results
         self.results.emit((loaded,errors))

任何帮助是极大的赞赏!

谢谢.
本.

解决方法

问题在于我使用的SQL库(一个自定义的内部解决方案),结果证明它不是线程安全的,因此执行了阻塞查询.

如果您遇到类似问题,请首先尝试删除SQL调用并查看它是否仍然阻塞.如果这解决了阻塞问题,请尝试通过MySQLdb使用原始SQL重新引入查询(或者使用您正在使用的DB类型的等效项).这将诊断问题是否与您选择的SQL库有关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读