안녕하세요?
지난번 포스팅에서 멀티 프로세싱에서 한계가 있었지만, 한번 찾아보니까, PyQt5에서는 QThread라는 것을 기본적으로 지원하고 있으며, 이게 멀티 스레딩이 된다는 정보까지는 얻었습니다. 그래서 이번 포스팅에서는 이 QThread를 한번 공부해 보는 것으로 포스팅을 하고자 합니다.
먼저 연습을 위해서 MyStockTrader라는 프로젝트 안에서 위 스크린샷과 같이 multithread.py를 만들어 보도록 해야 합니다.
다음으로 일단 인터넷에 나와 있는 코드를 그대로 옮겨 오도록 합니다. 이 코드는 윈도우 창을 하나 띄우고, 시간이 지나면서 카운트가 올라가는 카운터가 있으며, 버튼이 하나 있는 식으로 있습니다.
그리고 나서 버튼을 누르면 위 스크린샷과 같이 sleep명령어를 줘서 5초간 뭐추어 있도록 만들어 주도록 합니다. 이렇게 해서 원래는 없던 if __name__ == "__main__": 이라고 넣어 주어서 실행을 시켜 보도록 합니다.
그러자 위 스크린샷처럼 일단 윈도우가 나오기는 나오고, 다음으로는 이 DANGER! 라는 버튼을 눌렀을 때, 제대로 윈도우가 5초간 얼어버리는 현상을 볼 수 있었습니다.
이런 현상을 막아보고자 있다는 것이 위 스크린샷처럼 일단 Worker라고 하는 QRunnable이라는 클래스를 바로 만들어 주어서, 여기서 GUI의 스레드 말고 다른 스레드를 만들어서 따로 작동하도록 만들어 주도록 하는 것 입니다.
다음으로는 기존의 QMainWindow에서 QThreadPool()이라는 명령을 추가시켜 주도록 합니다. 이렇게 해서 위 스크린샷의 붉은 박스안에 있는 내용을 적어 주도록 합니다.
그리고 나서 기존에 있던 Danger버튼은 위 스크린샷과 같이 바꾸어 주도록 하는데, 버튼을 누르면 다른 스레드가 시작이 되도록 명령을 바꾸는 것 입니다.
이렇게 코드를 바꾸고 나서 실행을 시키니, DANGER! 라는 버튼을 눌러도 이전처럼 GUI가 멈추는 현상 = 얼어버리는 현상이 발생하지 않았습니다.
그리고 버튼을 한번씩만 5초 간격으로 누르면, 위 스크린샷과 같이 스레드가 시작했다가 끝나는 패턴을 반복해서 보여주고 있습니다.
그런데 진짜로 4개의 스레드가 한계라고 정해져 있는 것은 사실인 것인지, 일단 위 스크린샷을 보시면 4번 버튼을 연달아서 누르면 제대로 한꺼번에 실행이 되는데, 문제는 5번째는 4번째 스레드까지 모두 끝난 다음에야 실행이 되는 것을 확인할 수 있었습니다.
'무모한 도전-주식 인공지능 만들기' 카테고리의 다른 글
QThread를 향한 공부-3 (2) | 2019.07.26 |
---|---|
QThread를 향한 공부-2- (0) | 2019.07.25 |
새로운 방식의 시도-벽에 부딪친 아이디어 구현 (0) | 2019.07.24 |
새로운 방식의 시도-아이디어 구현-2- (0) | 2019.07.23 |
새로운 방식의 시도-아이디어 구현 (0) | 2019.07.22 |