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

pytrader의 parent process를 만드는 작업에 들어가 보기

by 인터넷떠돌이 2019. 3. 13.
반응형

안녕하세요?


이번 포스팅에서는 기존의 pytrader의 부모 프로세스 역할을 하는 프로세스를 만들어 보고자 합니다. 왜 이런 작업을 하느냐 하면, 키움증권의 open API는 무조건 조회 횟수를 1000회로 제한을 하면서, 로그아웃 기능은 없앴습니다. 그래서 이런 한계를 극복하기 위해서 pytrader의 부모 프로세스를 만든 다음에, 여기서 pytrader를 실행시키고 종료시키는 행동을 하는 것 입니다.



일단 그림으로 표현한 프로세스의 모식도입니다. 기존에는 pytrader하나만 실행을 시켰는데, 이제는 상위 프로세스가 명령을 내리면 pytrader가 로그인을 하고, 1000회를 채우면 종료하고, 이 신호를 부모 프로세스가 받으면 다시 체크해서 실행을 시키는 구조를 구현해 보고자 합니다.



이를 위해서 위 스크린샷과 같이 새로운 스크립트 파일을 만들어 봐야 합니다.



먼저 위 스크린샷과 같이 코딩을 하여서, 일단 자식 프로세스인 pytrader가 실행을 할 수 있는지 여부만 먼저 확인해 보도록 합니다.



먼저 위 스크린샷과 같이 제대로 pytrader가 작동을 하는 것을 봐서는 일단 subprocess로 코드를 만들어 놓은 것은 제대로 동작을 하는데 까지는 성공했다는 것을 알 수 있었습니다.



그런데 pytrader를 종료하고 나면, 위 스크린샷과 같은 종류의 에러가 뜨는 것을 확인할 수 있었습니다. 이대로는 문제가 될 소지가 있다는 생각이 들어서 한번 작업에 들어가 봐야 합니다.



일단 위 스크린샷과 같이 try와 except구문으로 만들어 놓은 다음에, 한번 실행을 시켜 보고자 합니다.




그래도 이런 에러가 사라지지 않는 것을 볼 수 있기는 있었습니다.



알고 보았더니, 위 스크린샷처처럼 그냥 변수 = 클래스이름() 이라는 식으로 지정을 하기만 해도 클래스의 객체화라고 해야 할까요? 말그대로 클래스를 실행하는 것은 가능한데, 다만 변수.run() 이 전에는 필수인줄 알았는데, 그건 아니라는 것 입니다. 



이제서야 pytrader를 종료했을 경우에는 제대로 위 스크린샷과 같이 제대로 code 0가 나오는 것을 볼 수 있는 것처럼 제대로 종료가 되는 것을 확인할 수 있었습니다.



그 다음에는 위 스크린샷처럼 super().__init__()와 같은 것으로 놓고, 유저 인터페이스를 만들어 놓도록 합니다.



먼저 if__name__ == "__main__": 항목에서는 위 스크린샷과 같은 형식으로 해서 show()와 app.exec_()를 붙여 주도록 합니다.



그런데 제가 디자인 했는 윈도우가 아니라 다른 윈도우가 나오는 것을 확인할 수 있기는 있었습니다. 일단 지난번에 했던 포스팅의 내용을 살펴보면서 어떻게 이 문제를 해결해야 합니다.




일단 Qt designer에서 위 스크린샷과 같은 형식으로 일단 pytrader의 부모 프로세스에서 사용이 될 인터페이스를 만들어 주도록 합니다.



다음으로는 위 스클니샷과 같이 새로 바뀐 유저 인터페이스를 지정해 놓도록 합니다.



그래도 아직까지 문제가 해결이 되지 않는 것을 확인해 볼 수 있었습니다.



그래서 이전에는 에러를 일으켜서 주석 처리를 하였는 구문의 주석을 해제해서 한번 살펴 보고자 합니다.



self.setupUi(self) 구문이 이번에는 유저 인터페이스가 뜨는데 결정적인 역할을 하는 것 이었습니다. 이전에는 몰랐는데, 점점 모르는 것을 알아가는 기분이 듭니다만, 아직도 제가 파이썬을 하는 것이 아니라 파이썬이 저를 하는 기분이 들 정도로 아직 많이 멀었다는 생각이 듭니다.

반응형