본문 바로가기
무모한 도전-주식 인공지능 만들기

QThread의 적용 part10

by 인터넷떠돌이 2019. 7. 30.
반응형

안녕하세요?

 

완성은 거의 되었지만, 작동하는 데 걸리는 시간이 문제라고 했는데, 이번 포스팅에서는 이걸 어떻게 다루었는지에 대해서 좀 더 획기적인 방법이 있어서 이에 대해서 다루어 보고자 합니다.

 

먼저 해야 할 일이라면 위 스크린샷에서 볼 수 있는 것처럼 communication.txt를 늘리는 것이라고 할 수 있습니다. 일단 위 스크린샷에서 볼 수 있는 것처럼 1번 communication.txt를 복사해서 이름만 바꾸는 것으로 20개 까지 늘려 주도록 합니다.

 

다음으로 서로 헷갈리지 않도록 multithread3.py를 만들어 주도록 합니다. 당연 multithread2의 복사본이며, 몇 가지 조작이 여기에는 가해지게 될 것입니다.

 

먼저 위 스크린샷처럼 일단 20개까지 한번 멀티 스레드를 만들어서 돌릴 경우에는 얼마나 시간이 걸릴 것인지에 대해서 한번 알아 보고자 합니다.

 

시작한 시간을 일단 마킹하는 데 성공했습니다. 이제 이 시간을 마지막 20번째 스레드가 끝난 시간과 계산해서 1분을 넘지 않으면 성공이라고 할 수 있습니다.

 

 

일단 마지막 20번째 스레드가 마친 시간을 표시하고 있습니다. 이 시간을 봐서는 계산해 보면 41초라는 것을 알 수 있었습니다. 이게 실전 모의투자에 들어가면 얼마나 걸릴 지는 모르겠습니다만, 일단 여기까지 할 수 있기는 있었습니다.

 

다음으로 작업을 하기 위해서 일단 왠만하면 subrpocess를 쓰지 않고서 작업을 할 수 없는지 알아보고자 했습니다. main()과 main2()를 만들어서 한번 작업을 해보도록 했습니다.

 

그리고 나서 재귀 함수라고 해야 할까요? 이 한계에 걸리지 않도록 위 스크린샷처럼 한계를 대폭 올려 주도록 합니다. 이러고도 걸릴 수 있습니다만, 그래도 일단 이렇게 하도록 합니다.

 

그런데 이렇게 하니까 당연하다면 당연하게도 위 스크린샷처럼 sys.exit()가 있어서 인지 그냥 1번 사이클이 돌고나서 종료가 되는 것을 확인할 수 있었습니다.

 

먼저 위 스크린샷처럼 sys.exit()를 중지시켜 보도록 합니다. 이렇게 하는 것으로 계속해서 작동을 되기는 되는데 문제가 하나 있습니다. 키움증권 OpenAPI는 로그아웃기능을 제공하지 않는 다는 것 입니다.

 

그래서 del명령어를 써서 기존에 있던 클래스의 인스턴스를 제거하는 과정에 들어가 보도록 했습니다. 그리고 나서 과도한 사이클을 돌수 있는 것을 방지하고자 일단 2초 정도 쉬어 가도록 만들어 주었습니다.

 

이렇게 하는 것으로 이제 마지막 20개의 스레드가 끝나고 나서 다시 작동을 하는 것을 볼 수있었습니다. 일단 특별한 업데이트 사항이 없는 상황에서는 다시 로그인을 할 때까지 약 7초가 걸린  다는 것을 알 수 있었습니다만, 아무튼 이것으로 어느정도 완성이 되기는 되었습니다.

반응형