- Today
- Total
내 머릿속 데이터베이스
[Python 3.4] 멀티쓰레딩과 멀티프로세싱 본문
날려먹고 이 글이 3번째 쓰는 글이다.
이번이 마지막이길.
파이썬 쓰레드는 GIL(Global Interpreter Lock) 때문에 오히려 싱글쓰레드보다 속도저하가 일어난다는 사실은 파이썬 개발자라면 다 알 것이다.
모른다면 관련 글인 아래를 참고...
- 하용호 - 파이썬으로 클라우드 하고 싶어요 : http://www.slideshare.net/kthcorp/h32011c6pythonandcloud-111205023210phpapp02
- 파이썬의 멀티쓰레딩과 멀티프로세스 : http://qkqhxla1.tistory.com/m/post/270
위 글에선 싱글스레드로 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초.
결론 : 그냥 멀티 프로세싱 쓰자.