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

평균회귀 테스트 중 서버 통신장애 문제를 해결하기 위한 방안

by 인터넷떠돌이 2019. 11. 2.
반응형

안녕하세요?

 

기존의 평균회귀 테스트는 일단 키움증권 서버에서 제대로 오기만 하면 그렇게 크게 어려울 것은 없이 2시간 넘게 걸리면 끝이 났습니다. 그런데 문제는 키움증권 서버에서 문제없이 데이터가 오는 경우가 없고, 이것 때문에 이래저래 정지가 되어 버리는 경우도 많습니다. 그래서 이 문제를 해결해 보려고, 한번 시도를 해 보았고, 약간의 성과가 나와서 일단 여기 포스팅에서 올려 보고자 합니다.

 

먼저 import해야 할 모듈로 threading이라고 해서 멀티 스레드를 사용 할 수 있도록 만들어 주는 작업을 먼저 시행해 보도록 합니다.

 

그리고 나서 다음으로 해야 할일은 여러번의 시도끝에 계속해서 실패를 해서, 일단 while loop라고 while문을 만들어 주어서 800회차 미만이면 계속 실행이 되도록 만들어 주도록 합니다.

 

다음으로 해야 할일은 subprocess인 자식 프로세스로 커뮤니케이션이 들어간 다음에 시간이 지체가 되었으면, 기존의 for문에서 빠져나오도록 만들어 주도록 합니다.

 

그리고 나서 기존의 방법은 그냥 자식 프로세스뒤에 kill()이나 terminate()를 붙이면 되었지만, 윈도우 운영체제에서는 위 스크린샷의 코드처럼 Popen()에서 "TASKKILL /F /PID {pid} /T".format(pid= ~~~~) 를 입력한 것을 볼 수 있습니다. 이게 정확하게 어떤 것인지 저는 잘 모르겠습니다만, 기존의 다른 코드와 메서드는 리눅스 운영체제를 사용하는 것을 기준으로 설명이 되어 있는데, 이게 윈도우 기준으로 만들어서 이렇게 되는 것이 아닌가 합니다.

 

그리고 나서 다음으로는 타이머가 타임아웃이 되면 실행이 될 메서드를 지정해 주는데, 여기서 self.timer2를 시작시키기 위한 코드와, 이 self.timer2가 타임아웃이 되면 또 울리는 것을 방지하기 위한 코드도 지정을 해 줍니다.

 

 

일단 여기까지 해서 제대로 제 의도대로 움직여 주기는 주었습니다. 그래서 이번에는 위 스크린샷에 있는 첫번째 타이머의 시간을 1초에서 120초인 2분으로 바꾸어 보았습니다.

 

그런데 문제가 하나 생겼습니다. 어떻게 된 것인지 중복 로그인이라고 나오는 것을 확인할 수 있었습니다. 이 문제는 그냥 넘어갈 수는 없습니다.

 

그래서 이번에는 일단 위 스크린샷처럼 한번 halfLife라는 표식을 찍어 주도록 해서 어느 시점에서 중복 로그인 문제가 발생한 것인지 알아보도록 하겠습니다.

 

다음으로는 작동시켜 보니까, 일단 첫번째로 통신지연에 대해서는 제대로 작업이 일어나기는 일어나는 것을 확인할 수 있었습니다.

 

그런데 두번째 통신장애 부터 문제가 발생하는 것을 관측할 수 있었습니다. 이렇게 해서는 작업을 그냥은 할 수 없는데, 무언가 조치가 필요해 보입니다.

 

그래서 기존에 있던 위 스크린샷에서 볼 수 있는 것처럼 일단 두번째 타이머를 작동시키기 위한 메서드가 문제가 되었다는 생각이 들기에, 이 부분을 그냥 주석처리 하도록 해 봅니다.

 

이렇게 해서 먼저 첫번째 통신장애에 대해서 제대로 대처를 하는 것을 한번 관찰할 수 있었습니다. 이 작업을 보자면, 일단 여기까지는 성공적인 듯 합니다.

 

그런데 여기서 멈추지 않고, 제대로 작업이 이어서 움직이는 것을 확인할 수 있었습니다. 일단 첫번째 통신 장애는 문제없이 통과를 했습니다.

 

그런데 이렇게 24번에서 이래저래 제대로 처리가 안되고 통신지연이 오랫동안 이어지는 것을 확인할 수 있었습니다. 이대로 끝나는 것인가 했는데...........

 

일단 이 포스팅을 올리는 시점에서 이런 연속적인 24번에서의 통신장애는 끝이 났습니다. 하지만 이게 끝까지 갈 수 있는지에 대해서는 아직까지 확신이 없는 상황인데, 일단 계속해서 작업을 해 보고서, 이 에러를 해결할 수 있는지에 대해서 한번 올려 보도록 하겠습니다.

반응형