안녕하세요?

 

오랫만에 이 지식정리 창고에 포스팅을 올리는데, 이번 포스팅의 내용은 그리 특별한 것은 없고, 어떻게 해서 제 경우에는 QThread라는 것을 사용할 수 있었는지 지에 대해서 한번 설명을 하는 자리를 마련하고자 합니다. 일단 이래저래 이론적인 이야기가 약간 들어가 있어서 지루할 수 있지만, 그래도 상당히 중요한 부분이기 때문에 일단 설명에 들어는 가도록 해 보겠습니다.

 

먼저 설명해야 되는 것이 무엇이냐 하면, multithreading이라고 하는 것인데, 간단하게 제가 이해한 대로 이야기를 하자면, 한개의 일만 처리하는 것이 아니라 한번에 여러개의 일을 처리하기 위한 작업이라고 이해를 했습니다. 이걸 응용하면 여러개의 주식 종목을 한번에 여러개 모니터링 하면서 처리할 수 있지 않을까? 하는 생각을 했습니다.

 

이전 포스팅에서 언급을 했다 시피, 조회수 제한 1000회를 피하기 위해서 자식 프로세스를 이용하였습니다. 그럼 이 자식 프로세스는 어떻게 구성이 되어 있느냐 하면, 크게 Worker라는 클래스와 MainWindow라는 2개의 클래스로 구성이 되어 있습니다.

 

 

그리고 이 클래스들은 크게 어떤 역할을 하는지에 대해서 설명을 하자면, 일단 파란색 테두리의 Worker라는 클래스 보다는 빨간색 테투리의 MainWindow라는 클래스에 대해서 설명을 먼저 해야 합니다. 우선 여기서는 키움증권 서버에 접속을 명령하고, 그 다음에 QThread라는 이 PyQt에서 사용할 수 있는 Multithreading기술을 사용할 준비를 해 줍니다. 그리고 나서 각각의 쓰레드가 되는 Worker라는 클래스를 출발시킵니다.

 

간단하게 그림으로 설명을 하자면, 위에서 지시를 내리는 클래스가 바로 MainWindow라는 클래스고, 여기서 가라고 명령을 하면, 각각의 쓰레드라고 주자가 되는 Worker라는 클래스가 여러개의 객체가 되면서 출발을 하게 됩니다. 이렇게 출발한 쓰레드는 무슨 역할을 하느냐 하면..........

 

각각의 쓰레드는 각각의 스레드에 배정이 되어 있는 각각의 주식 종목에 대해서 모니터링을 하게 됩니다. 이렇게 모니터링을 해서 매수할 타이밍이 되면 매수를 하고, 매도를 할 타이밍이 되면 매도를 해서 수익을 올리는 작업을 하게 되는 것 입니다.

 

그래서 명령을 내리는 MainWindow라는 클래스는 어떻게 구성이 되어 있느냐 하면, 우선 여기서 확인을 할 수 있는 것으로는 초기 시작시의 메서드에서 키움증권 서버에 접속을 하고, QThread의 조건을 설정하고, 다음으로 UI를 구성하는 코드를 작성하게 됩니다.

 

그리고 나서 따라오는 메서드에서 먼저 쓰레드가 되는 Worker클래스를 객체화라고 해야 할까요? 일단 그냥 문자로만 되어 있는 코드를 컴퓨터의 CPU에 일종의 작업으로 올려줍니다. 이렇게 한 다음에, 그 작업을 쓰레드로 하나씩 For문을 사용해서 진행시켜 주도록 합니다.

 

그런데 다른 것 보다, 이 QThread라는 것, 아니 파이썬이라는 프로그래밍 언어 자체에 한가지 문제가 있습니다. GIL이라고 하는 락(Lock)이 걸려 있어서 이 경우에는 어쩔 수 없이 멀티 쓰레딩을 해서 한꺼번에 각각의 쓰레드가 실행이 되어서 처리를 하는 것이 아니라 하나하나 순서대로 출발해서 작업이 끝난 다음에 다시 출발을 하는 작업을 거치게 됩니다. 즉, 엄밀한 의미에서는 한꺼번에 처리하는 것이 아니기는 합니다. 이런 아쉬움이 있기는 있고, 이를 뒤로하고 이번 설명과 정리를 마치도록 하겠습니다

 

다음 포스팅에서는 Worker라는 이 클래스에서 어떤 작업이 일어나서 주식종목을 하나하나 처리할 수 있는지에 대해서 한번 설명을 해야 하는데, 뭐랄까 저도 원래 전공이 컴퓨터 공학이나 프로그래밍이 아니다 보니 상당히 헤메기는 헤메이고 있습니다. 그래도 일단 제가 이해를 한 부분은 아낌없이 알려드리겠습니다. 그러니 혹시 틀린부분이 있으면 가르쳐 주시기 바랍니다.

+ Recent posts