首页 新闻 会员 周边

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。。。。。。。

FightingFor的主页 FightingFor | 初学一级 | 园豆:74
提问于:2020-05-24 08:34
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册