내 머릿속 데이터베이스

[Python 3.4] 멀티쓰레딩과 멀티프로세싱 본문

Programming/Python

[Python 3.4] 멀티쓰레딩과 멀티프로세싱

파도소리 2016. 8. 8. 17:09

날려먹고 이 글이 3번째 쓰는 글이다.

이번이 마지막이길.


파이썬 쓰레드는 GIL(Global Interpreter Lock) 때문에 오히려 싱글쓰레드보다 속도저하가 일어난다는 사실은 파이썬 개발자라면 다 알 것이다.

모른다면 관련 글인 아래를 참고...



위 글에선 싱글스레드로 3.34초가 나오는 연산이 듀얼스레드로 4.65초가 나온다고 했다.


위 내용은 오래된 내용으로 파이썬 2.x 버전에선 계속 나타날 것이라 생각한다.

하지만 현재까지도 파이썬은 3.x버전으로 계속 업그레이드 되고 있으며, 파이썬 3.2 Release Note 를 보면 이 GIL를 수정했다는 내용이 있다.

(두근두근)


그래서 현재 쓰는 3.4.4 버전의 파이썬은 어떨지 다시 테스트 해보았다.


사용한 코드는 위 글에서 작성된 코드 그대로인데, 다음과 같이 연산횟수를 4배 늘렸다.



Result :  3199999960000000 time = 8.915481090545654


8.9초가 소요되었다.


그럼 이걸 쓰레드 2개로 연산하면 8.9초 보다 느려지는지 확인 해 보겠다.


Result :  3199999960000000 time = 8.185956001281738


8.1초로 느려지는게 아니고 아주 조금 빨라졌다..?

확실히 GIL이 개선되었다고 할 수 있을 것 같다.


쓰레드를 4개로도 돌려본 결과도 공유한다.


Result :  3199999960000000 time = 7.8109190464019775


7.8초로 빨라지는게 보인다. 

확실히 과거 파이썬과는 다른 모습을 보여서 I/O 부하가 큰 작업 등은 이제 쓰레드를 이용해도 될 것 같다는 생각이 든다.



마지막으로 멀티프로세싱으로 프로세스 2개를 생성해서 같은 연산도 해보도록 하겠다.


Result :  3199999960000000 time = 4.879086017608643


4.8초. 


결론 : 그냥 멀티 프로세싱 쓰자.

Comments