파이썬에서 다중 처리를 가장 잘 구현하는 방법은 무엇입니까?



이 기사에서는 Python의 다중 처리에 대해 소개하고 진행중인 과정에서도 프로그래밍 방식의 데모를 제공합니다.

2019 년은 전 세계의 기술 발전에있어 매우 큰 해였습니다. 컴퓨터 제조업체에서 CPU와 프로세서에 더 많은 코어를 추가하여 휴대폰에서 더 스마트 한 칩을 출시하기 시작하면서 멀티 프로세싱은 더 이상 꿈이 아닙니다. 오늘날 멀티 프로세싱을 지원하는 가장 유명한 프로그래밍 언어 중 하나는 . 릴리스에 병렬 처리 기능을 도입 한 덕분에 전 세계의 코더는 이제 동시에 실행되는 코드를 원활하게 생성 할 수 있으므로 실행 시간이 크게 늘어납니다.

이 기사에서는 다음 사항을 다룰 것입니다.





C ++ STL 인터뷰 질문

시작하겠습니다.

Python에서 다중 처리

다중 처리 란 무엇입니까?

다중 처리는 주어진 인스턴스에서 둘 이상의 작업을 지원하는 시스템의 기능으로 간단히 정의 할 수 있습니다. 이것이 의미하는 바는 다중 처리 시스템의 응용 프로그램이 작은 조각으로 나뉘어 진 다음 효율성을 높이고 전체 실행 시간을 줄이기 위해 서로 독립적으로 실행된다는 것입니다. 시스템의 프로세서는 각각의 작은 조각에 자체 독립 스레드를 할당하여 독립 실행 형 엔터티로 작동 할 수 있도록합니다.



다중 처리의 필요성

프로세서에 코어가 하나만있는 컴퓨터 시스템을 상상해보십시오. 이 단일 코어에 여러 작업이 할당 된 경우 각 작업을 중간에 중단하고 다음 작업으로 전환합니다. 이렇게하면 각 작업을 완료하는 데 필요한 시간이 늘어나지 않을뿐만 아니라 시스템의 전반적인 효율성도 저하됩니다.

반면에 멀티 프로세싱 컴퓨터는 동시에 여러 다른 작업을 독립적으로 실행할 수있는 개별 코어라고하는 여러 기능 장치를 내부에 포함하는 하나의 프로세서를 가질 수 있습니다. 이것은 시스템의 효율성을 증가시킬뿐만 아니라 장기적으로 시스템의 런타임을 상당히 감소시킵니다.



Python의 다중 처리 시스템은 두 가지 유형이 있습니다.

다중 프로세서 시스템

이 시스템은 기본적으로 내부에 여러 프로세서가 있으며, 각 프로세서는 한 번에 하나의 작업을 수행하고 독립적 인 구성 요소로 작동합니다.

멀티 코어 프로세서 시스템

이 시스템에는 동일한 프로세서에 여러 개의 코어가 있으며, 그 안에서 코어는 별도의 장치로 작동하고 할당 된 작업을 독립적으로 수행합니다.

Python에서 다중 처리를위한 코드

이제 다중 처리의 기본 개념에 익숙해 졌으므로 Python에서 다중 처리를 수행하는 방법을 살펴 보겠습니다.

Python에서 인터프리터는 단일 작업을 여러 구성 요소로 나누고 독립적으로 처리하는 매우 간단하고 직관적 인 API를 포함합니다.

파이썬에서 다중 처리에 대한이 개념을 더 잘 이해하려면 아래 프로그램 모듈을 살펴보십시오.

예 1

# 멀티 프로세싱 모듈 가져 오기 import 멀티 프로세싱 def print_cube (num) : '' '주어진 num의 큐브를 인쇄하는 함수' ''print ( 'Cube : {}'. format (num * num * num)) def print_square (num) : '' '주어진 숫자의 제곱을 인쇄하는 함수' ''print ( 'Square : {}'. format (num * num)) if __name__ == '__main__': # 프로세스 생성 p1 = multiprocessing.Process (target = print_square, args = (10,)) p2 = multiprocessing.Process (target = print_cube, args = (10,)) # 프로세스 1 시작 p1.start () # 프로세스 2 시작 p2.start () # 프로세스 1이 완료 될 때까지 대기 p1 .join () # 프로세스 2가 끝날 때까지 기다립니다 p2.join () # 두 프로세스 모두 끝났습니다 print ( 'Done!')

산출

정사각형 : 100

큐브 : 1000

끝난!

이제이 프로그램을 더 잘 이해하기 위해 분석해 보겠습니다.

  1. 첫 번째 단계는 다중 처리 모듈을 가져 오는 것입니다. 이렇게하려면 다음 구문을 사용하십시오. import multiprocessing.

  2. 이제 다중 처리 모듈을 가져 왔으므로 계속 진행하여 프로세스를 생성하겠습니다. 이를 위해 Process 클래스의 객체를 생성하고 다음 인수를 할당합니다. 대상 :이 프로세스에 의해 실행되어야하는 함수 및 args : 대상 함수에 전달되어야하는 인수.

참고 : 프로세스 생성자는 인수뿐만 아니라 여러 대상을 처리 할 수있는 기능이 있지만 위의 예에서는 아래와 같이 두 개의 대상과 인수 만 Process에 할당했습니다.

p1 = multiprocessing.Process (target = print_square, args = (10,))

p2 = multiprocessing.Process (target = print_cube, args = (10,))

자바에서 스캐너 사용
  1. 이제 프로세스가 생성되었으므로 동일한 시작 구문을 작성하겠습니다.

p1.start ()

p2.start ()

프로세스가 시작되면 현재 프로그램과 이미 실행중인 프로그램이 동시에 실행됩니다. 특정 상황에서 현재 프로그램의 실행을 중지하고 기존 프로그램의 실행에만 집중해야 할 경우 아래와 같이 join 기능을 사용합니다.

p1.join ()

p2.join ()

이 구문을 입력하면 인터프리터는 프로그램 p1이 실행을 마칠 때까지 기다린 다음 프로그램 p2로 이동합니다.

이 개념을 더 이해하려면 아래에서 Python에서 다중 처리에 대한 다른 예를 살펴보십시오.

예 2

# 멀티 프로세싱 모듈 가져 오기 import multiprocessing import os def worker1 () : # 인쇄 프로세스 id print ( '실행중인 프로세스의 ID print ('worker1 실행중인 프로세스의 ID : {} '. format (os.getpid ())) def worker2 () : # 인쇄 프로세스 id print ( 'worker2를 실행하는 프로세스의 ID : {}'. format (os.getpid ())) if __name__ == '__main__': # 주 프로그램 프로세스 ID 인쇄 print ( '주 프로세스의 ID : {}'. format (os .getpid ())) # 프로세스 생성 p1 = multiprocessing.Process (target = worker1) p2 = multiprocessing.Process (target = worker2) # 프로세스 시작 p1.start () p2.start () # 프로세스 ID print ( 'ID of process p1 : {} '. format (p1.pid)) print ('프로세스 p2의 ID : {} '. format (p2.pid)) # 프로세스가 끝날 때까지 기다립니다 p1.join () p2.join () # 두 프로세스 완료 print ( '두 프로세스 모두 실행 완료!') # 프로세스가 살아 있는지 확인 print ( 'Process p1 is alive : {}'. format (p1.is_alive ())) print ( 'Process p2 is alive : {} '.format (p2.is_alive ()))

산출

주요 프로세스 ID : 18938

worker1을 실행하는 프로세스의 ID : 18939

worker2를 실행하는 프로세스의 ID : 18940

프로세스 p1의 ID : 18939

프로세스 p2의 ID : 18940

두 프로세스 모두 실행이 완료되었습니다!

프로세스 p1이 활성화 됨 : False

프로세스 p2가 활성화 됨 : False

위의 프로그램에서 프로세스 p1과 p2는 모두 개별 메모리와 독립적으로 실행됩니다. 둘 다 실행이 완료되면 프로그램이 종료됩니다.

이것으로 Python의 다중 처리에 대한이 기사의 끝으로 이동합니다.

다양한 응용 프로그램과 함께 Python에 대한 심층적 인 지식을 얻으려면 다음을 수행 할 수 있습니다. 연중 무휴 지원 및 평생 액세스가 가능한 라이브 온라인 교육.

질문이 있으십니까? 기사의 댓글 섹션에서 언급하시면 다시 연락 드리겠습니다.