안녕하세요?


지난번 포스팅에서는 벽에 부딪친 것을 포스팅 하였습니다만, 이번 포스팅에서는 그래도 작업을 이어 나가기 위해서 한번 해결책이 있는지 이래저래 살펴 보았고, 이제는 그 내용을 포스팅 하고자 합니다.



먼저 위 스크린샷에 보이는 것처럼 두번째 클래스인 Runnable은 run메서드에 pytrader를 실행시키는 메서드를 직접 집어 넣도록 합니다.



그러자 이제서야 제대로 pytrader2가 실행이 되는 것을 확인할 수 있었습니다. 이것으로 invokeMethod라는 것을 사용하지 않고도 일단 가능해 보였습니다.



다음으로는 이제 부모 프로세스에서 버튼을 떼었을 때에도 제대로 pytrader2가 종료가 될 수 있도록 만들어 낼 수 있도록 이제 End_of_Pytrader2라는 메서드를 손보도록 합니다.



먼저 이 버튼의 위치를 위 스크린샷처럼 Runnable 클래스 안으로 옮기도록 합니다.




다음으로는 while문으로 무한루프를 만들되, 종료가 될 수 있도록 루프를 20번 초과하면 자동으로 루프를 탈출할 수 있도록 디자인을 하도록 합니다.



일단 그래도 뭐가 제대로 되지 않아서-왜인지 첫번째 시도에서 pytrader2를 종료한 다음에, 다시 시작을 해야 하는 상황에서는 다시 시작을 못하는 것을 확인할 수 있었습니다.



그런데 여기서 한가지 놀라운 것을 확인할 수 있었습니다. 일단 위 스크린샷에서 pytrader2가 종료가 되어서 None으로 pid()값이 나와야 하는데, 그 값이 나오지 않는 것을 확인할 수 있었습니다.



그래서 혹시 종료방법에 문제가 있는 것이 아닌가 해서 한번 pytrader2에서 quit()가 아니라 sys.exit()라는 형식으로 만들어 주었습니다.




그래도 pytrader2가 종료가 되고서, Qprocess의 현 상태가 종료가 되었다는 것을 알려주는 것이 제대로 나오지 않는 것을 확인할 수 있었습니다.



어디가 문제인가 했더니, 의외로 간단하게, Qprocess에서 waitForFinished()라는 메서드로 종료가 될 때까지 기다려 주도록 하고, 종료가 된 다음에는 Qprocess를 close()라는 함수를 이용해서 Qprocess를 종료시키는 것 이었습니다.



이제 gif파일에서 어떻게 해서 이게 작동을 하는 지를 보여주고 있습니다. 이렇게 하는 식으로 해서 이제는 작업을 할 수 있었습니다만, 여기서 이렇게 pytrader2가 무한루프로 작동을 해도, 부모 프로세스의 GUI가 얼어붙지 않는 것도 확인을 할 수 있었습니다. 거의 이번 주 내내 걸려서 이 문제를 해결 하는데 많은 시간을 보냈는데, 의외로 해답은 간단한 것이었습니다.

  1. dchoi 2019.03.23 03:57 신고

    Pycharm 화면을 보니 breakpoint가 라인마다 찍혀있는데, 한 라인씩 실행시키는 기능이 필요하신거라면 Step Over 기능 (F8키)을 사용하는 것도 편리합니다.

    • 안녕하세요?

      일이 있어서 답변이 늦었습니다.
      Step Over기능이 있는 줄은 몰랐습니다. 앞으로 디버그를 하기 위해서는 저 F8번키를 눌러서 자주 자주 Step Over를 실행해 보도록 하겠습니다.
      도움 감사합니다.

+ Recent posts