Python에서 병렬 처리 수행
- 처리 풀 및 해당 방법을 사용하여 Python에서 다중 처리 수행
-
apply_async()
함수를 사용하여 Python에서 다중 처리 수행 -
map()
및map_sync()
함수를 사용하여 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 print
와 Second 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