Python Process 생성 프로세스의 2가지 방법 상세 정보
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={})
여기서 각 매개변수의 의미는 다음과 같습니다.
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 창설 프로세스 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.