小编use*_*306的帖子

PySide/PyQt - 启动CPU密集型线程会挂起整个应用程序

我试图在我的PySide GUI应用程序中做一个相当常见的事情:我想将一些CPU密集型任务委托给后台线程,以便我的GUI保持响应,甚至可以在计算进行时显示进度指示器.

这是我正在做的事情(我在Python 2.7,Linux x86_64上使用PySide 1.1.1):

import sys
import time
from PySide.QtGui import QMainWindow, QPushButton, QApplication, QWidget
from PySide.QtCore import QThread, QObject, Signal, Slot

class Worker(QObject):
    done_signal = Signal()

    def __init__(self, parent = None):
        QObject.__init__(self, parent)

    @Slot()
    def do_stuff(self):
        print "[thread %x] computation started" % self.thread().currentThreadId()
        for i in range(30):
            # time.sleep(0.2)
            x = 1000000
            y = 100**x
        print "[thread %x] computation ended" % self.thread().currentThreadId()
        self.done_signal.emit()


class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

        self.work_thread = QThread()
        self.worker = Worker()
        self.worker.moveToThread(self.work_thread) …
Run Code Online (Sandbox Code Playgroud)

python qt pyqt4 pyside qthread

13
推荐指数
1
解决办法
6058
查看次数

标签 统计

pyqt4 ×1

pyside ×1

python ×1

qt ×1

qthread ×1