내 프로그램에서 일부 다중 처리를 사용하려고하는데 문제가 있습니다. Qt 창에서 버튼을 눌러 여기서 중요하지 않은 멀티 프로세싱을 시작합니다. 다른 버튼으로는 멈출 수 없습니다. 지금까지이 코드가 있습니다.
# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
import time
import multiprocessing
def mp_worker(a):
for i in range(a):
time.sleep(1)
print('keep going :' +str(i))
return
def Multifunc(k):
for i in range(k):
p = multiprocessing.Process(target= mp_worker , args=(10,))
p.start()
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX_param_scene = QHBoxLayout()
self.Param_box = QGroupBox(" ")
self.layout_Param_box = QVBoxLayout()
self.Button_Threads = QPushButton('Run Threads')
self.Button_stop = QPushButton('stop Threads')
self.layout_Param_box.addWidget(self.Button_Threads)
self.layout_Param_box.addWidget(self.Button_stop)
self.Param_box.setLayout(self.layout_Param_box)
self.mainHBOX_param_scene.addWidget(self.Param_box)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
self.Button_Threads.clicked.connect(self.RunThreads)
self.Button_stop.clicked.connect(self.stop)
def RunThreads(self):
Multifunc(10)
return
def stop(self):
# How stop the multi process ?
return
def main():
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
따라서 RunThreads
함수는 다중 처리를 실행 하고 함수는 다중 처리 stop
를 중지해야하지만 Python이 내 작업자 내부에 있으므로 Qt 클래스에서 다중 처리를 중지 할 수 없습니다. 내 stop
기능이 무엇인지 이해하지 못합니다 . 다중 처리 중지를 수행하려면 일종의 SIGNAL을 사용해야합니까? 아니면 몇 가지 변수를 전달해야 Multifunc
합니까? 이것에 대해 약간 혼란 스럽습니다.
프로세스를 중지하려면 Process 개체가 있어야합니다. 프로세스를 위해 다음과 같이 수정합니다.
def Multifunc(k):
ps = []
for i in range(k):
p = multiprocessing.Process(target= mp_worker , args=(10,))
ps.append(p)
p.start()
return ps
def RunThreads(self):
self.ps = Multifunc(10)
return
def stop(self):
# How stop the multi process ?
for p in self.ps:
p.terminate()
완전한 코드 :
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
import time
import multiprocessing
def mp_worker(a):
for i in range(a):
time.sleep(1)
print('keep going :' +str(i))
return
def Multifunc(k):
ps = []
for i in range(k):
p = multiprocessing.Process(target= mp_worker , args=(10,))
ps.append(p)
p.start()
return ps
class SurfViewer(QMainWindow):
def __init__(self, parent=None):
super(SurfViewer, self).__init__()
self.parent = parent
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.mainHBOX_param_scene = QHBoxLayout()
self.Param_box = QGroupBox(" ")
self.layout_Param_box = QVBoxLayout()
self.Button_Threads = QPushButton('Run Threads')
self.Button_stop = QPushButton('stop Threads')
self.layout_Param_box.addWidget(self.Button_Threads)
self.layout_Param_box.addWidget(self.Button_stop)
self.Param_box.setLayout(self.layout_Param_box)
self.mainHBOX_param_scene.addWidget(self.Param_box)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
self.Button_Threads.clicked.connect(self.RunThreads)
self.Button_stop.clicked.connect(self.stop)
def RunThreads(self):
self.ps = Multifunc(10)
return
def stop(self):
# How stop the multi process ?
for p in self.ps:
p.terminate()
def main():
app = QApplication(sys.argv)
ex = SurfViewer(app)
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다