본문 바로가기
파이썬

multiprocessing : Process-based "threading" inteface

by 혜룐 2015. 11. 10.
multiprocessing : Process-based "threading" inteface
python 2.6에서 기본 모듈에 추가. multiprocessing 모듈은 threading 모듈과 비슷한 API가지고 있는 process 기반의 병렬처리 알고리즘 이다. python은 Global Interpreter Lock을 이용하여 병행처리 과정에서 발생할 수 있는 문제를 방지한다. GIL은 간단한 구현 때문에 계속 사용되어 왔지만, CPU 하나만을 사용하는 것을 가정하였기 때문에 현재 처럼 CPU안에 코어가 여러개 있다고 하더라도, 실제로 병렬처리 되지 않고 한번에 하나의 thread 밖에 처리하지 않는다. multiprocessing 모듈을 이러한 문제를 회피하기 위해 process 기반으로 병렬처리를 지원하는 모듈이다.
multiprocessing 모듈에서는 객체간에 오브젝트 공유하기 위한 방법으로 Pipe와 Queue를 제공한다.
multiprocessing.Queue : Queue.Queue 와 거의 동일한 인터페이스를 가지는 공유 자원을 저장할 수 있는 큐이다
from multiprocessing import Process, Queue 
def do_work(start, end, result): 
for i in range(start,end): 
result.put(i) 
return 
def main(): 
START, END = 0, 10000000 
result = Queue() 
p1 = Process(target=do_work, args=(START, END/2, result)) 
p2 = Process(target=do_work, args=(END/2, END, result)) 
p1.start() 
p2.start() 
p1.join() 
p2.join() 
sum = 0 
for i in range( result.qsize()): 
sum += result.get(block=False) 
print sum 
main()