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()
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()
'파이썬' 카테고리의 다른 글
feedparser 모듈로 rss 버전 확인 하는 함수를 만들어 보자 (0) | 2015.11.10 |
---|---|
rss , Atom 그리고 RDF를 포함해, 피드를 구문 분석하는 파이썬 라이브러리 모듈인 feedparser (0) | 2015.11.10 |
XML문서 파싱하고, 검색하는 방법에 대해 알아보자. (0) | 2015.11.10 |
XML을 처리 하는 파이썬 라이브러리중 ElementTree에 대해 알아보자.( xml 생성) (0) | 2015.11.10 |
시스템 명령행 인자와 파일다루기 예제(간단한 메모장 만들기) (0) | 2015.11.10 |