안녕하세요?


이번 포스팅에서는 지난번에 pytrader2에 각종 데이터를 제대로 전달하는 것을 성공적으로 보여주는 데 성공했습니다. 그런데 이걸 일정 횟수 이상 pytrader2가 작동을 하고 나면, 자동으로 pytrader2를 종료하고, 이후에 다시 시작시키는 작업을 하고자 합니다.



먼저 이전에 하였는 Wrong_Turn_Season_2()라는 메서드에서 힌트를 얻도록 했습니다. 여기서 사용이 되는 self가 붙어 있는 카운터가 있는데, 이걸 기준으로 해서 한번 로그인에 10번 조회가 걸리지 않도록 하는 것 입니다.



일단 해당하는 메서드를 실행시키고 나면, 위 스크린샷에 나와 있는 것처럼 한번 실행을 할때마다 카운터가 한번씩 작동을 하게 되는데, 이 작동하는 카운터의 갯수가 500초과가 될 경우 pytrader2를 종료시키라는 식으로 명령을 짜 놓도록 합니다. 물론  잘 되는지 실험을 하기 위해서는 그냥 15정도로 숫자를 극단적으로 작게 만들어 줍니다.



다음으로는 이전에 만들었던 부모 프로세스의 스크립트로 와서, while문을 작성해 주도록 합니다. 그리고 나서 여기서 이 반복문을 통해서 계속해서 작동이 잘 되리라 생각을 했습니다만, 일단 1차 적으로는 실패를 했습니다.



위 스크린샷처럼 카운터의 첫 값을 지정하지 않은 탓도 있었습니다. 그렇지만, 계속해서 문제가 된 것이 무엇인가 하면, 일단 제가 찾아본 바로는 Qprocess()가 살아있는지 죽었는지 체크하기 위해서는 .state(), .pid(), .atEnd() 라는 함수가 있다고 합니다.



일단 이렇게 하고서도 첫 시도는 완전히 실패를 하였습니다. 어디가 문제가 된 것인지 모르겠습니다만, 일단 txt파일이 무언가 문제가 아닌가 하는 생각이 들었습니다.



그러나 확인을 해 본 결과, 일단 txt파일에 제대로 정보가 저장이 되어 있기는 있는 것을 확인할 수 있었습니다. 그래서 어디가 문제인지 다시금 찾아 보았습니다.



일단 부모 프로세스의 pytrader2를 작동시키는 메서드를 오로지 Qprocess가 죽어 있는 상태에서만 작동을 시키도록 위 스크린샷처럼 바꾸어 보도록 했습니다.



그리고 나서 pytrader2를 Qprocess로 작동시킨 다음에는 이전 pytrader에서 했던 것처럼 delay를 주기 위한 메서드를 따로 만들어서 작동을 시키도록 합니다.




그리고 나서 딜레이를 주기 위한 메서드에서는 위 스크린샷처럼 10초가 흐른 다음에 다시금 버튼을 눌렀을 때 메서드가 작동이 되라는 식으로 코딩을 해 줍니다.



그런데 여기서도 무언가 부자연스러운 동작이 나오면서 제 의도대로 부드러운 작업이 되지 않고, 그냥 뭐랄까 프로그램이 얼어버리는 현상이 벌어졌습니다.



그래서 한번 Qprocess를 선언하는 코드를 아예 부모 프로세스의 첫 시작부에 집어넣어 보도록 했습니다. 이렇게 하면 상황이 나아지리라 생각을 했습니다.



일단 이렇게 해서 처음으로 위 스크린샷처럼 작동을 시켰는데, 문제는 버튼을 눌러도, 계속해서 버튼의 색상만 바뀌지, 정작 pytrader2는 작동이 되지 않는 현상을 목격했습니다.



어디가 문제인가 했더니, Qprocess.pid()의 값이 작동하지 않을 때는 설명서에 0이라는 것과는 다르게 실제로는 None이라는 값이 나옵니다.



문제는 루프가 제대로 작동을 하는 것 까지는 확인을 할 수 있었습니다만, 부모 프로세스인 ParentPytrader가 그대로 freeze라고 해서 얼어붙는 현상을 볼 수 있었습니다. 이래서야 제가 의도한 것이 아니기는 아니기 때문에, 이에 대한 해결책을 찾아보고서 다음 포스팅에서 찾아뵙겠습니다.

+ Recent posts