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

가장 힘들어 보이는 장애물을 넘기 위한 시도-9-

by 인터넷떠돌이 2019. 4. 19.
반응형

안녕하세요?

 

계속해서 하다하다 QProcess에서는 답이 없다는 생각이 들어서, 이번 포스팅에서 부터 어떻게 해서 답이 없던 상황을 타개하기 위한 작업을 하기 시작했는지에 대해서 다루어 보고자 합니다. 결국 QProcess에서 어떻게 자식 프로세스와 통신을 하는지에 대해서는 알 수는 없었습니다만, 이건 너무 시간이 걸리니까 지금 당장 사용가능한 방법을 사용해서 어떻게 문제를 타결하기는 했습니다.

 

일단 계속해서 QProcess에서 방법을 찾아보기 위해서, 이번에는 자식 프로세스에다가 state()함수를 사용해서 어떻게 Qprocess가 자식 프로세스에서는 어떤 상황인지 알아보고자 합니다.

 

일단 위 스크린샷을 보시면 자식 프로세스에서는 계속해서 0이라는 state를 보여주고 있는데, 이는 QProcess가 제대로 실행이 되지 않았다는 것을 알 수 있었습니다.

 

그래서 이번에는 위 스크린샷과 같이 읽기 위해서 기다리라는 함수를 넘어 보아서, 무언가 변화가 생기지 않을까 하는 기대를 하면서 기다려 보았습니다.

 

그런데 이렇게 하고서도 아무런 변화도 일어나지 않은 것을 확인할 수 있기는 있었습니다. 그래서 어디를 어떻게 건드려야 할지 감이 안 잡혔습니다.

 

그래서 기존에 subprocess에서 input()이라는 명령어를 사용했더니 지난번에 제대로 부모 프로세스에서 보냈는 데이터를 가져오는 것을 보아서 한번 사용을 해 보았습니다.

 

그런데 어떻게 된 것인지 모르겠습니다만, 일단 자식 프로세스만 실행을 시켜보니까, GUI가 뜨지 않고 그대로 얼어버리는 것을 확인할 수 있었습니다.

 

 

그래서 이전에 하였는 방법을 사용해 보고자 pytrader2를 복제해서 이번에는 pytrader4를 만들어 보고자 했습니다. 그리고 나서 새 py파일을 생성했습니다.

 

그리고 나서 기존의 subprocess에서 exe파일이 아니라 이번에는 py파일을 실행시키기 위해서 위 스크린샷처럼 [실행하고자 하는 파이썬의 환경 exe파일, 실행하고자 하는 py파일의 경로]를 입력하였습니다.

 

일단 subprocess에서 한번도 해보지 않았습니다만, 그래도 어떻게 파이썬 py파일을 실행시키는 것 까지는 확실하게 성공했다고 할 수 있어 보입니다.

 

그리고 나서 새로운 py파일을 RLTrader에 생성하도록 합니다. 이렇게 하는 이유는 gui가 없는 상황에서 input()이 어떻게 작용하는지 알아보기 위해서 입니다.

 

그리고 나서 test2.py를 코딩하도록 해 봅니다. 여기서는 부모 프로세스의 입력이 있으면 다른 숫자가 계산되어서 나오지만, 문제는 input()에서 아무런 것이 없다면 그냥 0이 나오도록 프로그램을 짜도록 해 봅니다.

 

그리고 나서 위 스크린샷에서 보이는 것처럼 부모 프로세스가 되는 pytrader4.py로 가서 기존에 test.py로 되어 있던 것을 test2.py로 바꾸어 주도록 합니다.

 

다음으로는 부모 프로세스인 pytrader4.py에서는 입력이 될 데이터를 아예 입력하지 않도록 해 봅니다. 그리고 나서 자식 프로세스가 실행이 되면, 0이 결과로 나올 것 입니다.

 

그런데 실행결과 아무런 결과도 에러도 나오지 않는 것을 확인할 수 있었습니다. 그냥 말 그대로 아무것도 나오지 않는 것을 볼 수 있었습니다.

 

알고봤더니 if __name__ == '__main__': 이 없어서 생긴 문제이기 때문에, 이를 어떻게 하기 위해서 위 스크린샷처럼 자식 프로세스가 되는 test2.py에 집어넣어 주도록 합니다.

 

그런데 어떻게 된 것인지 input()이 들어간 부분에서 계속해서 프로그램이 그냥 얼어버리는 것을 확인할 수 있었습니다. 이 얼어버리는 원인이 무엇인지 알아봐야 하는 생각이 들었습니다.

 

그래서 데이터가 없어서 이런 일이 생겼다고 생각을 해서, 원래는 비어 있었는 부분을 위 스크린샷처럼 집어넣을 데이터를 만들어 주고 encode()시켜 주도록 합니다.

 

그제서야 제대로 결과가 stdout에서 나오는 것을 확인할 수 있었습니다. 이번 일을 결과서 해서 보니까, input()이라는 함수는 들어올 데이터가 없으면 프로그램 전체를 얼어버리게 만드는 특성이 있기 때문에 어떻게 이를 막는것도 일지만, 지금 당장은 그럴 수 없어서 한번 subprocess를 이용한 자식 프로세스와 통신을 하는 것으로 일을 진행해 보아야 겠다는 생각이 듭니다.

반응형