Python에서 병렬 처리 수행

Najwa Riyaz 2023년1월30일
  1. 처리 풀 및 해당 방법을 사용하여 Python에서 다중 처리 수행
  2. apply_async()함수를 사용하여 Python에서 다중 처리 수행
  3. map()map_sync()함수를 사용하여 Python에서 다중 처리 수행
Python에서 병렬 처리 수행

이 기사에서는 Python에서 여러 프로세스를 병렬로 실행하는 방법을 설명합니다.

처리 풀 및 해당 방법을 사용하여 Python에서 다중 처리 수행

Python에서 다중 처리를 수행하려면 다음 단계를 수행하십시오.

  • 먼저multiprocessing모듈을 가져옵니다.
  • Pool클래스를 사용하여 Python 처리 풀을 정의합니다. 이 풀은 작업자 프로세스 풀을 나타냅니다. 아래 코드를 예로 들어 보겠습니다.
Pool(processes=n)

따라서Pool클래스는n수의 프로세스를 동시에 실행할 수 있습니다. 이 클래스에는 풀의 작업자 프로세스에 작업을 위임 할 수있는 메서드가 포함되어 있습니다.

다음은Pool클래스의 몇 가지 메소드입니다.

  • Pool.map() - 풀의이 차단 방법을 사용하여 결과가 준비 될 때까지 차단합니다. 이 메서드는 관련된 iterable을 여러 청크로 잘라냅니다. 그런 다음 청크를 별도의 작업으로 프로세스 풀에 제출합니다.

  • 프로세스를 동시에 제출하려면Pool클래스의 다음 non-blocking 메소드를 사용합니다. 함수의 결과를 얻으려면get()메소드를 사용하십시오.

  • Pool.apply_async()

  • Pool.map_async()

컴퓨터가 다중 처리를 위해 처리 할 수있는 프로세스 수를 결정하려면 장치에있는 프로세서 수를 알아야합니다. 다음 코드를 사용하여이를 확인할 수 있습니다.

import multiprocessing as mp

print("Number of processors: ", mp.cpu_count())

출력:

Number of processors:  4

apply_async()함수를 사용하여 Python에서 다중 처리 수행

다음은 0-9 사이의 숫자에 대한 범위의 제곱을 결정하는 동안 Python의 처리 풀을 사용하여 다중 처리를 보여주는 예제입니다.

여기서는 선택 사항 인 Process 작업자의 이름도 인쇄했습니다.

from multiprocessing import Pool
from multiprocessing import Process, current_process
import time
from time import sleep
import random


def fnc_square(x):
    print(current_process().name)
    return x * x


if __name__ == "__main__":
    pool = Pool(processes=4)
    result = pool.apply_async(fnc_square, [6])
    print(result.get(timeout=1))
    print(pool.map(fnc_square, range(10)))

출력:

SpawnPoolWorker-1
36
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

map()map_sync()함수를 사용하여 Python에서 다중 처리 수행

map_async기능은 차단되지 않는 반면map기능은 차단됩니다. 다음은이 두 명령의 차이점을 보여주는 예입니다.

from multiprocessing import Pool
import time


def f(x):
    print(x * x)


if __name__ == "__main__":
    pool = Pool(processes=1)
    pool.map(f, range(10))
    r = pool.map_async(f, range(10))
    print("First print")
    print("Second print")
    r.wait()
    print("Third print")

여기에서pool.map()함수가 10 개의 작업 호출이 완료 될 때까지 대기하는 것을 볼 수 있습니다. 따라서 결과가 순서대로 인쇄됩니다.

또한pool.map_async()는 10 개의 함수 호출을 비동기 적으로 실행합니다. r.wait()함수가 호출되면 실행을 위해 프로세서를 차단합니다. 따라서 출력에서 ​​First printSecond print로 인쇄 메시지가 표시되지만 Third print는 항상 끝에 있습니다.

출력:

0
1
4
9
16
25
36
49
64
81
First print
Second print
0
1
4
9
16
25
36
49
64
81
Third print

관련 문장 - Python Process