티스토리 뷰


병렬 구조로 처리할 수 있는 경우에 multiprocessing 모듈을 이용해서 성능향상을 얻을 수 있다.


데이터의 양이나 처리할 자료에 따라 성능 향상이 전혀 없을 수도 있다.


아래 소수를 구하는 코드가 있다.


에레토스테네스는 병렬처리가 까다로우므로 아래 방법으로 해보겠다.


import multiprocessing
import time
import math


def is_prime(n):
for i in range(2, int(math.sqrt(n))+1):
if not n % i:
return False
return True


def count_prime(n):
return len([i for i in range(2, n + 1) if is_prime(i)])


if __name__ == "__main__":
n = 1000000
start = time.time()
result = count_prime(n)
print(result, time.time()-start)


8.184 초가 나왔다.


이번에는 count_prime 만  multiprocess 를 적용해 보면 



def count_prime(n):
pool = multiprocessing.Pool(processes=4)
return pool.map(is_prime, [i for i in range(2, n+1)]).count(True)


3.380 초가 나왔다. 


이처럼 성능 향상을 얻을 수는 있지만 자료구조가 병렬로 처리 가능해야 한다.




댓글