멤버십에서 한 PPT가 올라왔는데, python 으로 분산처리를 하는 과정의 PPT였다.
지금까지 다수의 연산처리는 Multi Thread 방식을 사용해서 처리 하였었는데, 이 PPT 에 의하면 오히려 multi-Thread 방식은 속도가 더 느려진다 (Global Interpretor Locking 때문)
http://docs.python.org/2/library/multiprocessing.html#module-multiprocessing
하여금 Multi-Processing 방식을 추천해주는데 코드는 아래와 같음.
(사용법이 thread 사용법과 거의 동일함)
(python 2.6 이상부터는 default 모듈임)
from multiprocessing import Process,Queue
def do_work( start, end , result):
sum =0;
for i in range(start,end):
sum += i;
result.put(sum)
return
if __name__ == "__main__":
START, END = 0, 2000000
result = Queue()
pr1 = Process(target = do_work, args=(START, END/2 , result ))
pr2 = Process(target = do_work, args=(END/2, END, result))
pr1.start()
pr2.start()
pr1.join()
pr2.join()
result.put('STOP')
sum = 0;
while True :
tmp = result.get()
if tmp == 'STOP' : break
else: sum += tmp
print "RESULT : ", sum
root@k1rha:~/PYTHON/MultiProc# time python multi_proc.py
RESULT : 1999999000000
real 0m0.544s
user 0m0.384s
sys 0m0.176s
Thread 와 비교하면 어떨까?
from threading import Thread
def do_work (start, end ,result):
sum = 0
for i in range(start, end):
sum += i
result.append(sum)
return
if __name__ == "__main__":
START, END = 0, 2000000
result = list()
th1 = Thread(target=do_work, args=(START, END/2,result))
th2 = Thread(target=do_work, args=(END/2,END,result))
th1.start()
th2.start()
th1.join()
th2.join()
print "result: ", sum(result)
root@k1rha:~/PYTHON/thread_ex# time python thread_ex.py
result: 1999999000000
real 0m0.810s
user 0m0.208s
sys 0m0.668s
'Python' 카테고리의 다른 글
[python 2.7] 엑셀 다루기 xlwt xlrd 사용하여 엑셀 컨트롤 하기 (0) | 2013.08.13 |
---|---|
[Python 2.7] Parallel Python 으로 분산처리 테스트 (0) | 2013.08.06 |
[python] exploit 코드들에서 자주 나오는 lambda 사용법으로 인한 pack 에 대한 이해 (0) | 2013.05.30 |
python2.7 thread 예제 코드 (0) | 2013.05.30 |
문자열 조합 방법 (brute forcing) (0) | 2013.04.07 |