对象与线程对象Python

对象与线程对象Python,python,multithreading,oop,Python,Multithreading,Oop,我正在用Python和PyQt编写GUI,其中一些逻辑部分需要在以毫秒为单位的特定时间间隔内执行。我认为将这些部分作为线程运行并跟踪时间是最好的,但如果我错了,请纠正我 第二个问题,我可以将线程用作经典对象,并以相同的方式使用它们吗?调用方法,或者只是将它们用于特定的任务,并使它们尽可能简单?因为从线程的本质上看,我通常倾向于将run()方法作为过程来编写,但却缺少面向对象的方法 谢谢第一部分: 如果代码的计时部分计算量很大,那么最好在QThread中执行,否则就不需要使事情复杂化 正如x3al

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

第二个问题,我可以将线程用作经典对象,并以相同的方式使用它们吗?调用方法,或者只是将它们用于特定的任务,并使它们尽可能简单?因为从线程的本质上看,我通常倾向于将run()方法作为过程来编写,但却缺少面向对象的方法

谢谢第一部分:

如果代码的计时部分计算量很大,那么最好在QThread中执行,否则就不需要使事情复杂化

正如x3al在评论中所说,没有明显的理由说明您不能使用QTimer进行计时。如果需要重复信号,可以使用setInterval。如果是关于X ms后的单个信号,则可以使用singleShot()

第二部分:

如果我正确理解了这一部分,那么您是在询问关于如何使用线程的建议——因为这取决于您的实现(movetothread vs subclassing),请看下面的答案

请允许我再举一个我以前在这个问题上使用过的例子:

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()

希望这对你有帮助

为什么不使用QtCore.QTimer?谢谢你的提示。但是QTimer不只是用于触发特定时间间隔后的事件吗?我需要更深入一点,但我还需要跟踪应用程序开始时的时间,读取文件作为带有时间戳的消息源,如果时间戳与经过的时间匹配,则发送消息。谢谢!我将使用QTimer并根据“time\u from\u file-current\u time”设置要触发的QTimer。我已经在使用QThread了,但我想我对使用它们的正确方法有点困惑。