python 多线程 主线程_从次线程调用主线程的函数

在PyQt中,作者尝试通过创建一个二级线程来避免GUI冻结,以便在用户界面运行rsync备份命令时保持其响应性。他们参考了一个YouTube视频,成功实现了在二级线程中运行其他任务,但发现rsync命令仍然导致GUI冻结。问题在于,尽管rsync在二级线程中执行,但它可能仍阻塞了主线程。作者寻求解决这个问题的方法。
摘要由CSDN通过智能技术生成

我在PyQt中为用户创建一个GUI来创建大量数据的备份。在

GUI(主线程)接收用户的输入。rsync命令(用于备份)也在主线程中被调用,因此窗口处于冻结状态。在

目的是尝试qthread,这样应用程序就可以在不冻结的情况下运行。在

我的搜索资料:

1:https://www.youtube.com/watch?v=o81Q3oyz6rg。这个视频展示了如何不冻结图形用户界面运行其他任务在二级线程。我试过了,效果很好。但是在工作线程中运行命令没有帮助。在

即使在二级线程中调用rsync,gui仍然冻结。我做错什么了?。在import sys

from PyQt4 import QtCore, QtGui

from backUpUi import Ui_MainWindow

import threading, Queue

class callerThread(QtCore.QThread):

def __init__(self, func, parent=None, *args, **kwargs):

super(callerThread, self).__init__(parent)

self._func = func

self._args = args

self._kwargs = kwargs

def run(self):

self._func(*self._args, **self._kwargs)

class Monitor(QtCore.QObject):

updateText = QtCore.pyqtSignal(str)

def update_list(self):

t_monitor = callerThread(self.monitor_vector, parent=self)

t_monitor.daemon = True

t_monitor.start()

def monitor_vector(self):

self.updateText.emit('updated list')

class backUpMain(QtGui.QMainWindow):

def __init__(self,parent=None):

super(backUpMain, self).__init__(parent)

self.ui = Ui_MainWindow()

self.ui.setupUi(self)

self.connect(self.ui.okButton, QtCore.SIGNAL("clicked()"), self.startThread)

self.ui.cancelButton.released.connect(sys.exit)

self.monitor = Monitor()

def _handlebackUpdate(self, txt):

QtGui.QMessageBox.information(self, "thread started!", txt)

self.ui.logEdit.clear()

self.ui.logEdit.setText(txt)

def startThread(self):

self.monitor = Monitor()

self.monitor.updateText.connect(self._handlebackUpdate)

self.monitor.update_list()

def threadDone(self,text1):

self.ui.logEdit.append("Worker Thread finished processing %s" % text1)

def exitWindow(self):

self.ui.close()

def main():

app = QtGui.QApplication(sys.argv)

dialog = backUpMain()

dialog.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值