Python中使用QThread多线程终止任务的问题
时间: 2020-05-24来源:博客园
前景提要
Python中使用QThread多线程终止任务的问题
0 悬赏园豆: 50 [待解决问题] 任务WORK在thread里面运行后,如果想停止任务(而不是简单终止线程),用线程安全的方式用槽信号来触发任务停止条件时,不起作用,因为线程内需要等任务(dowork)自然完成后,才会接收其他槽信号队列。如果直接用跨线程的方式执行实例self.work.stop,反而能够立即停止任务。只是隐约感觉这种方式不太正规,请问有没有其他方式?
class Work(QObject):
update_process = pyqtSignal(int)
update_completed = pyqtSignal()
.....ini_thing....
def dowork(self):
self.var = 0
while self.var < 10 and self._running == True
self.var += 1
self.update_process.emit(self.var)
self.update_completed.emit()
def stopwork(self):
self._running = false
class UiTest(QDialog):
.....UI-thing....
self.work = Work()
self.thread = QThread()
self.work.moveToThread(self.thread)
self.thread.started.connect(self.work.dowork)
self.work.update_process.connect(self.currentStep.setValue)
self.worker.update_completed.connect(lambda:print('work finished'))
self.btnDoWork.clicked.connect(self.work.dowork)
1. self.btnStopWork.clicked.connect(self.work.stopwork)[/color] -- 通过槽触发任务
2. self.btnStopWork.clicked.connect(self.stopwork)[/color] -- 直接跨线程介入任务
self.btnStopThread.clicked.connect(self.stop_thread)
self.btnStartThread.clicked.connect(self.start_thread)
self.thread.finished.connect(lambda: print('thread finished'))
def start_thread(self):
self.thread.start()
def stop_thread(self):
self.thread.quit()
self.thread.wait()
def stop_work(self): -------------直接跨线程介入任务 self.work.stopwork
。。。。APP Thing。。。。。。。 Python QThread movetothread 多线程 FightingFor | 初学一级 | 园豆: 104
提问于:2020-05-24 08:34 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题

清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行