对象与线程对象Python

时间:2015-06-04 14:08:20

标签: python multithreading oop

我在Python和PyQt中编写 GUI ,逻辑的某些部分需要在以ms为单位的特定时间间隔内执行。我认为将这些部分作为线程运行并记录时间是最好的,但如果我错了请纠正我。

第二个问题,我可以使用线程作为经典对象并以相同的方式使用它们吗?调用方法或只是将它们用于特定任务并保持尽可能简单?因为从线程性质来看,我经常试图将run()方法编写为程序,并且某种程度上缺乏OOP方法。

由于

1 个答案:

答案 0 :(得分:2)

第一部分:

如果代码的定时部分计算量很大,那么在QThread中执行它会很好 - 如果不是,则不需要使事情变得复杂。

正如x3al在评论中所说,没有明显的理由说明你不能使用QTimer进行计时。如果您需要重复信号,可以使用 setInterval 。如果它在X ms之后只有一个信号,你可以使用 singleShot pyqt4-doc)。

第二部分:

如果我正确地得到这个部分你就是在寻求关于如何使用线程的建议 - 因为这取决于你的实现(movetothread vs subclassing),看看这个答案Background thread with QThread in PyQt

请允许我回收一下我之前使用的一个例子:

class ThreadObject(QObject):
started = pyqtSignal()
finished = pyqtSignal()

def __init__(self, var1, var2):
    super(ThreadObject, self).__init__()
    self.var1 = var1
    self.var2 = var2

    self._isRunning = True

def stop(self):
    _isRunning = False

def run(self):
    # do something with the var's and send the results to where they are needed while _isRunning is True

class UIelement(QWidget):
    # initialize, create UI and so on
    def clicksomebutton(self):
        self.obj = ThreadObject(self.var1, self.var2) # handle copies of vars to object
        self.thread = = QThread(self, objectName='workerThread')
        self.obj.moveToThread(self.thread)
        # connect start, stop, run, etc.
        self.thread.start()

希望这能帮到你!