Python Process 생성 프로세스의 2가지 방법 상세 정보

앞에서 os 사용을 소개했습니다.fork() 함수는 다중 프로세스 프로그래밍을 실현하는데 이 방법의 가장 뚜렷한 결함은 Windows 시스템에 적용되지 않는다는 것이다.이 섹션에서는 Python이 Windows 플랫폼에서 새 프로세스를 만들 수 있도록 지원하는 방법을 설명합니다.
Python multiprocessing 모듈은 Windows 플랫폼에서 새로운 프로세스를 만드는 데 사용할 수 있는 프로세스 클래스를 제공합니다.Thread 클래스를 사용하여 다중 스레드를 만드는 방법과 유사하며, Process 클래스를 사용하여 다중 프로세스를 만드는 방법도 다음과 같은 두 가지가 있습니다.
프로세스 클래스의 실례 대상을 직접 만들면 새로운 프로세스를 만들 수 있습니다.
프로세스 클래스의 하위 클래스를 계승하여 실례 대상을 만들거나 새로운 프로세스를 만들 수 있습니다.프로세스 클래스를 계승하는 하위 클래스는 부모 클래스의run() 방법을 다시 써야 합니다.
뿐만 아니라 프로세스 클래스에서도 자주 사용하는 속성과 방법을 제공했다. 표1과 같다.
속성명 또는 방법명
기능
run()
두 번째 프로세스를 만드는 방법은 상속 클래스에서 방법을 다시 써야 하며, 이 방법에는 새 프로세스가 실행할 코드가 포함되어 있습니다.
start()
하위 라인을 시작하는 것과 마찬가지로 새로 만든 프로세스도 수동으로 시작해야 합니다. 이 방법의 기능은 새로 만든 라인을 시작하는 것입니다.
join([timeout])
thread류join() 방법의 사용법과 유사합니다. 그 기능은 다중 프로세스 실행 과정입니다. 다른 프로세스는join() 방법을 호출하는 프로세스가 실행되거나 규정된timeout 시간이 끝날 때까지 기다려야 계속 실행할 수 있습니다.
is_alive()
현재 진행 과정이 아직 살아 있는지 판단하다.
terminate()
프로세스를 중단합니다.
name 속성
프로세스의 이름을 바꿀 수도 있고, 프로세스의 이름을 얻을 수도 있습니다.
daemon
수호 루틴과 유사하게 이 속성을 True로 설정하면 새 프로세스를 수호 프로세스로 설정할 수 있습니다.
pid
프로세스의 ID 번호를 반환합니다.대부분의 운영 체제는 각 프로세스에 고유한 ID 번호를 할당합니다.
표 1 Python Process 클래스 공통 속성 및 방법
다음은 프로세스를 만드는 두 가지 방법에 대해 상세하게 설명할 것입니다.

프로세스 클래스를 통해 프로세스 만들기


thread 클래스를 사용하여 하위 루틴을 만드는 방식과 매우 유사합니다. 프로세스 클래스를 사용하여 실례화된 대상을 만듭니다. 그 본질은 이 클래스의 구조 방법을 호출하여 새로운 프로세스를 만드는 것입니다.Process 클래스의 구성 방법 형식은 다음과 같습니다.

def __init__(self,group=None,target=None,name=None,args=(),kwargs={})
여기서 각 매개변수의 의미는 다음과 같습니다.
  • 그룹: 이 매개 변수는 실현되지 않았으며 전참할 필요가 없습니다
  • target: 새 프로세스에 작업 수행을 지정합니다. 즉, 함수를 지정합니다
  • name: 새 프로세스의 이름을 설정합니다
  • args:target 매개 변수에 지정된 매개 변수에 비키워드 매개 변수를 전달합니다
  • kwargs:target 매개 변수에 지정된 매개 변수에 키워드 매개 변수를 전달합니다
  • 다음 프로그램은 프로세스 클래스로 새 프로세스를 만드는 방법을 보여 줍니다.
    
    from multiprocessing import Process
    import os
    print(" ID:",os.getpid())
    #  ,  target  
    def action(name,*add):
     print(name)
     for arc in add:
      print("%s -- %d" % (arc,os.getpid()))
    if __name__=='__main__':
     # 
     my_tuple = ("http://jb51.net/python/",\
        "http://jb51.net/shell/",\
        "http://jb51.net/java/")
     # ,  action()  
     my_process = Process(target = action, args = ("my_process ",*my_tuple))
     # 
     my_process.start()
     # 
     action(" ",*my_tuple)
    
    프로그램 실행 결과:
    현재 프로세스 ID: 12980
    마스터 프로세스
    http://jb51.net/python/- 현재 프로세스 12980
    http://jb51.net/shell/- 현재 프로세스 12980
    http://jb51.net/java/- 현재 프로세스 12980
    현재 프로세스 ID: 12860
    my_프로세스 프로세스
    http://jb51.net/python/- 현재 프로세스 12860
    http://jb51.net/shell/- 현재 프로세스 12860
    http://jb51.net/java/- 현재 프로세스 12860
    설명이 필요한 것은,multiprocessing을 통해.프로세스를 생성하고 시작할 때 프로그램은 if__name__=='__main__':,그렇지 않으면 이 프로그램을 실행하면 이상을 일으킬 수 있습니다.
    이 프로그램에는 각각 주 프로세스와 우리가 만든 새 프로세스가 두 개의 프로세스가 있습니다. 주 프로세스는 전체 프로그램을 실행하고 하위 프로세스는 if__를 실행하지 않습니다.name__ == '__main__' 에 포함된 프로그램은 이 판단 문장 이외의 모든 실행 가능한 프로그램을 실행한 다음, 우리가 할당한 작업 (즉 target 매개 변수를 통해 지정한 함수) 을 실행합니다.

    프로세스 상속 클래스를 통해 프로세스 만들기


    thread 하위 클래스를 사용하여 라인을 만드는 방식과 유사합니다. 프로세스 클래스를 직접 사용하여 프로세스를 만드는 것 외에 프로세스의 하위 클래스를 만들어서 프로세스를 만들 수 있습니다.
    주의해야 할 것은 프로세스의 하위 클래스를 만들 때 하위 클래스 내용에run() 방법을 다시 써야 한다는 것이다.실제로 이 방법이 하는 역할은 첫 번째 생성 방식에서 target 파라미터가 실행하는 함수와 같다.
    또한 프로세스 하위 클래스를 통해 프로세스를 만듭니다. 프로세스 클래스를 사용하는 것과 같이 이 클래스의 실례 대상을 먼저 만들고 start () 방법으로 프로세스를 시작합니다.다음 프로그램은 프로세스 하위 클래스를 통해 프로세스를 만드는 방법을 보여 줍니다.
    
    from multiprocessing import Process
    import os
    print(" ID:",os.getpid())
    #  , 
    def action(name,*add):
     print(name)
     for arc in add:
      print("%s -- %d" % (arc,os.getpid()))
    # 
    class My_Process(Process):
     def __init__(self,name,*add):
      super().__init__()
      self.name = name
      self.add = add
     def run(self):
      print(self.name)
      for arc in self.add:
       print("%s -- %d" % (arc,os.getpid()))
    if __name__=='__main__':
     # 
     my_tuple = ("http://jb51.net/python/",\
        "http://jb51.net/shell/",\
        "http://jb51.net/java/")
     my_process = My_Process("my_process ",*my_tuple)
     # 
     my_process.start()
     # 
     action(" ",*my_tuple)
    
    프로그램 실행 결과:
    현재 프로세스 ID: 22240
    마스터 프로세스
    http://jb51.net/python/- 현재 프로세스 22240
    http://jb51.net/shell/- 현재 프로세스 22240
    http://jb51.net/java/- 현재 프로세스 22240
    현재 프로세스 ID: 18848
    my_프로세스 프로세스
    http://jb51.net/python/-- 현재 프로세스 18848
    http://jb51.net/shell/-- 현재 프로세스 18848
    http://jb51.net/java/-- 현재 프로세스 18848
    분명히 이 프로그램의 실행 결과는 이전 프로그램의 실행 결과와 대체적으로 같고, 프로세스를 만드는 방식은 약간 다를 뿐이다.
    독자들이 첫 번째 방식으로 프로세스를 만드는 것을 추천합니다. 왜냐하면 이런 방식은 프로그래밍이 간단할 뿐만 아니라 프로세스가 target 함수를 직접 포장하여 더욱 뚜렷한 논리 구조를 가지고 있기 때문입니다.
    이 Python Process 창설 프로세스에 대한 2가지 방법에 대한 상세한 설명은 여기 있습니다. 더 많은 Python Process 창설 프로세스 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기