PyQt5是QTimer运行在单独的线程,它是阻塞吗?



我有一个使用数据库的应用程序。我想设置一个定时器来启动一个函数,它将定期修改数据库。但是我想确保它是阻塞的,所以在这个函数完成之前,不要对db进行读写操作。

我的QTimer是在GUI线程,所以据我所知,它的插槽将阻塞主线程。我说的对吗?

class AppLauncher(QtWidgets.QMainWindow, AppWindow.Ui_MainWindow):
def __init__(self, parent=None):
super(AppLauncher, self).__init__(parent)
self.setupUi(self)
flags = QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setWindowFlags(flags)
self.setWindowState(QtCore.Qt.WindowFullScreen)
self.fooTimer = QTimer(self)
self.fooTimer.timeout.connect(self.foo)
def foo(self):
pass
def main():
app = QApplication(sys.argv)
form = AppLauncher()
form.show()
app.exec_()
if __name__ == '__main__':
main()

QTimer总是在它被创建和启动的线程中运行,但这并不重要,因为它不会改变timeout连接函数的结果行为,即使它在另一个线程中执行。

重要的是槽/函数所在的线程,只要foo是与您想要"阻塞"的任何其他函数在同一线程中的实例的成员,它将按预期工作,在它返回之前阻止执行其他任何操作。

最新更新