Knowledge Map
쓰레드, 멀티 프로세싱 본문
출처 : http://www.slideshare.net/kthcorp/h32011c6pythonandcloud-111205023210phpapp02?from_m_app=ios
쓰레드
파이썬 버전 2.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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, 20000000 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) | cs |
멀티 프로세싱
파이썬 버전 2.7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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, 20000000 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 | cs |
=====================================================================================
구글파이낸스 모듈을 이용해서 주식 정보를 가져오는 것을 하고 있는데
한국 주식 모든 번호를 가져오는 것을 잘 모르겠다. 찾아 보고 있기는 한데 아직 못찾아서 그냥 아주 무식한 방법으로 1000000 부터 999999까지 돌려보려고 했다.
하지만 하나만 돌리니까 진짜 어마무시하게 느린데다가 해놓고 좀 시간이 지나니 그냥 메모리만 잡아 먹고 있었다.
그래서 공부 삼아 스레드를 써볼까 했지만 그것도 위의 출처 주소대로 파이썬 내부의 GIL의 존재덕분에 사실상 파이썬에서는 스레드라고 하기도 어렵다.
그래서 찾아봤더니 멀티프로세싱이 있어서 그것을 적용해보니 잘 돌아간다.
시험삼아 3개의 멀티프로세싱을 돌리고 있는데 확실히 3배는 빠른거 같다 ㅋㅋㅋ
시간나면 좀더 멀티 프로세싱에 대해서 배워봐야 겠다.
(역시 예상대로 요청을 천번 넘게 하니 봇 취급 당해서 막혔다 ㅜㅡ.. 아마 그전에 막혔겠지)
===================================================
그냥 써본 예시로 남겨본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from multiprocessing import Process, Queue from googlefinance import getQuotes import json def do_work(start, end, cnt): for i in range(start, end): try: json.dumps(getQuotes(str(i)),indent=2) print "\n\ni is ==>",i,"\n\n" except: print i, if cnt%50 == 0: print cnt += 1 continue if __name__ == "__main__": START, END = 190958,999999 result = Queue() pr1 = Process(target = do_work, args=(START, int(END/5), 10)) pr2 = Process(target = do_work, args=(int(END/5), int(END/5*2), 20)) pr3 = Process(target = do_work, args=(int(END/5*2), int(END/5*3), 30)) pr4 = Process(target = do_work, args=(int(END/5*3), int(END/5*4), 40)) pr5 = Process(target = do_work, args=(int(END/5*4), END, 50)) pr1.start() pr2.start() pr3.start() pr4.start() pr5.start() pr1.join() pr2.join() pr3.join() pr4.join() pr5.join() | cs |
'PYTHON' 카테고리의 다른 글
css 정렬 코드 (0) | 2016.07.03 |
---|---|
특정 디렉토리 안에 있는 모든 htm, html, php 파일 인코딩 변환 (0) | 2016.06.28 |
DataStructure in Python[Insert Sort] (0) | 2016.05.15 |
파이썬 - 트위터 연계 1 (0) | 2016.05.13 |
파이썬 으로 doc 파일 읽기 (0) | 2016.05.11 |
Comments