QT 창에서 다중 프로세스를 중지하려면 어떻게해야합니까?

ymmx

내 프로그램에서 일부 다중 처리를 사용하려고하는데 문제가 있습니다. 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합니까? 이것에 대해 약간 혼란 스럽습니다.

Eyllanesc

프로세스를 중지하려면 Process 개체가 있어야합니다. 프로세스를 위해 다음과 같이 수정합니다.

  1. 프로세스 목록을 반환합니다.

def Multifunc(k):
    ps = []
    for i in range(k):
        p = multiprocessing.Process(target= mp_worker , args=(10,))
        ps.append(p)
        p.start()
    return ps
  1. 클래스의 속성에 객체 목록을 저장합니다.

def RunThreads(self):
    self.ps = Multifunc(10)
    return
  1. 각 프로세스에 대해 종료 기능을 실행합니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 프로세스에서 사용중인 코어를 표시하려면 어떻게해야합니까?

분류에서Dev

Visual Basic에서 코드를 중지하려면 어떻게해야합니까?

분류에서Dev

AngularJS에서 값보기를 중지하려면 어떻게해야합니까?

분류에서Dev

JavaFX에서 MouseEvent를 중지하려면 어떻게해야합니까?

분류에서Dev

Flutter로 다중 페이지 API에 액세스하려면 어떻게해야합니까?

분류에서Dev

이전 서비스를 중지하려면 어떻게해야합니까?

분류에서Dev

시작된 서비스를 중지하려면 어떻게해야합니까?

분류에서Dev

실행중인 프로세스에 다시 참여하려면 어떻게해야합니까?

분류에서Dev

이미지를 중앙에 배치하려면 어떻게해야합니까?

분류에서Dev

서브 쉘이 종료되기 전에 (SIGSTOP에 따라) 서브 쉘의 하위 프로세스를 중지하려면 어떻게해야합니까?

분류에서Dev

Smartface.io에서 네트워크 연결이 끊어진 경우 모든 프로세스를 중지하려면 어떻게해야합니까?

분류에서Dev

lldb를 사용하여 중지 된 프로그램에서 계속하려면 어떻게해야합니까?

분류에서Dev

우분투 서버 (SSH)에 연결, 로그 아웃 후 프로세스 종료를 중지하려면 어떻게해야합니까?

분류에서Dev

실행중인 프로세스를 소유하지 않고 새 화면 셸에 연결하려면 어떻게해야합니까?

분류에서Dev

웹 오디오 스크립트 프로세서를 중지하고 버퍼를 지우려면 어떻게해야합니까?

분류에서Dev

나중에 pip 설치용 PyPI 패키지를 다운로드하려면 어떻게해야합니까?

분류에서Dev

터미널에서 apt-get 업데이트 프로세스를 일시 중지 / 재개하려면 어떻게해야합니까?

분류에서Dev

다른 사용자로 실행중인 프로세스에 대해 Fidder 캡처를 활성화하려면 어떻게해야합니까?

분류에서Dev

itterations를 중지해야하는 함수 내부에서 어떤 일이 발생하면 while 루프를 중지하려면 어떻게해야합니까?

분류에서Dev

디버거가 프로세스에 연결되도록 Python 스크립트를 중지하려면 어떻게해야합니까?

분류에서Dev

.NET에서 StreamWriter의 소스를 다중으로 설정하려면 어떻게해야합니까?

분류에서Dev

Qt5에서 QTableView 다시 그리기를 트리거하려면 어떻게해야합니까?

분류에서Dev

중앙 칸막이를 중앙에 일관되게 유지하려면 어떻게해야합니까?

분류에서Dev

LibreOffice Impress에서 이미지를 중앙에 더 쉽게 배치하려면 어떻게해야합니까?

분류에서Dev

LibreOffice Impress에서 이미지를 중앙에 더 쉽게 배치하려면 어떻게해야합니까?

분류에서Dev

Excel 문서를 다른 창에서 열려면 어떻게해야합니까?

분류에서Dev

ActivityIndicator를 화면 중앙에 배치하려면 어떻게해야합니까?

분류에서Dev

이전 단계가 끝날 때까지 프로세스를 중지하려면 어떻게해야합니까?

분류에서Dev

서로 중첩 된 div를 구성하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    특정 프로세스에서 사용중인 코어를 표시하려면 어떻게해야합니까?

  2. 2

    Visual Basic에서 코드를 중지하려면 어떻게해야합니까?

  3. 3

    AngularJS에서 값보기를 중지하려면 어떻게해야합니까?

  4. 4

    JavaFX에서 MouseEvent를 중지하려면 어떻게해야합니까?

  5. 5

    Flutter로 다중 페이지 API에 액세스하려면 어떻게해야합니까?

  6. 6

    이전 서비스를 중지하려면 어떻게해야합니까?

  7. 7

    시작된 서비스를 중지하려면 어떻게해야합니까?

  8. 8

    실행중인 프로세스에 다시 참여하려면 어떻게해야합니까?

  9. 9

    이미지를 중앙에 배치하려면 어떻게해야합니까?

  10. 10

    서브 쉘이 종료되기 전에 (SIGSTOP에 따라) 서브 쉘의 하위 프로세스를 중지하려면 어떻게해야합니까?

  11. 11

    Smartface.io에서 네트워크 연결이 끊어진 경우 모든 프로세스를 중지하려면 어떻게해야합니까?

  12. 12

    lldb를 사용하여 중지 된 프로그램에서 계속하려면 어떻게해야합니까?

  13. 13

    우분투 서버 (SSH)에 연결, 로그 아웃 후 프로세스 종료를 중지하려면 어떻게해야합니까?

  14. 14

    실행중인 프로세스를 소유하지 않고 새 화면 셸에 연결하려면 어떻게해야합니까?

  15. 15

    웹 오디오 스크립트 프로세서를 중지하고 버퍼를 지우려면 어떻게해야합니까?

  16. 16

    나중에 pip 설치용 PyPI 패키지를 다운로드하려면 어떻게해야합니까?

  17. 17

    터미널에서 apt-get 업데이트 프로세스를 일시 중지 / 재개하려면 어떻게해야합니까?

  18. 18

    다른 사용자로 실행중인 프로세스에 대해 Fidder 캡처를 활성화하려면 어떻게해야합니까?

  19. 19

    itterations를 중지해야하는 함수 내부에서 어떤 일이 발생하면 while 루프를 중지하려면 어떻게해야합니까?

  20. 20

    디버거가 프로세스에 연결되도록 Python 스크립트를 중지하려면 어떻게해야합니까?

  21. 21

    .NET에서 StreamWriter의 소스를 다중으로 설정하려면 어떻게해야합니까?

  22. 22

    Qt5에서 QTableView 다시 그리기를 트리거하려면 어떻게해야합니까?

  23. 23

    중앙 칸막이를 중앙에 일관되게 유지하려면 어떻게해야합니까?

  24. 24

    LibreOffice Impress에서 이미지를 중앙에 더 쉽게 배치하려면 어떻게해야합니까?

  25. 25

    LibreOffice Impress에서 이미지를 중앙에 더 쉽게 배치하려면 어떻게해야합니까?

  26. 26

    Excel 문서를 다른 창에서 열려면 어떻게해야합니까?

  27. 27

    ActivityIndicator를 화면 중앙에 배치하려면 어떻게해야합니까?

  28. 28

    이전 단계가 끝날 때까지 프로세스를 중지하려면 어떻게해야합니까?

  29. 29

    서로 중첩 된 div를 구성하려면 어떻게해야합니까?

뜨겁다태그

보관