QThread Freezes GUI



  • It is not completely freezing. However, when I do some heavy tasks in QThread, the GUI responds slowly. For instance,

    import sys
    from PySide2.QtCore import QThread
    from PySide2.QtWidgets import (QApplication, QWidget, PushButton,QComboBox, QVBoxLayout)
    
    class Task(QThread):
        def run(self):
            # some heavy tasks
            print('task started')
            k = 0
            for i in range(10000):
                for j in range(50000):
                    k += 1
            print('task finished')
    
    class Gui(QWidget):
        def __init__(self):
            super().__init__()
            layout = QVBoxLayout()
            button = QPushButton('click me')
            button.clicked.connect(self.do_task)
            combobox = QComboBox()
            combobox.addItems(['1', '2', '3', '4', '5'])
            layout.addWidget(button)
            layout.addWidget(combobox)
            self.setLayout(layout)
    
        def do_task(self):
            self.thread = Task()
            self.thread.start()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Gui()
        window.show()
        sys.exit(app.exec_())
    

    Here is the example GIF animation.

    0_1535983667385_Peek 2018-09-03 22-05.gif

    However, if I use PyQt5 to run the script (replacing PySide2 module), the GUI response will not delay at all.

    0_1535984088340_Peek 2018-09-03 22-04.gif

    How could I make the GUI have more CPU resource or higher priority when there are other threads running at the same time?

    Testing environment: Python 3.6, PySide2 5.11.1, PyQt5 5.11.2, Kubuntu 18.04 64-bit.


  • Lifetime Qt Champion

    Hi,

    Looks like there's some problem with the PySide 2 implementation. You should check the bug report system to see if it's something known. If not, please consider opening a new report providing your example and as much details as possible about your current setup.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.