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

멀티 프로세스를 이용한 병렬처리에 들어가 보기 -4-

by 인터넷떠돌이 2020. 2. 27.
반응형

안녕하세요?

 

또 다시 이렇게 작업을 했는 결과를 올리는 시간이 찾아왔습니다. 일단 이번 포스팅에서는 지난번에 언급한 대로 PyQt5를 이용한 GUI를 사용했다면, QProcess를 사용해야 하는데, 이걸 지난번에는 적용하려다가 통신을 연결하는데 실패했는 경험이 있었습니다. 그래서 이번에는 제대로 될지 잘은 모르겠습니다.

 

먼저 위 스크린샷에서 볼 수 있는 것처럼 일단 코드를 2개 추가해 주도록 합니다. 이 코드들은 원랜느 QProcess를 작동시키고, 여기서 나오는 결과를 읽어서 TheMarker에 주어야 하는데 그게 안되어서 끝내 주석처리를 하였습니다.

 

그리고 나서 다음으로 해야 할 것은 어떻게 자동으로 제가 파이썬 환경을 찾을 수 없어서 하는 수 없이 그대로 가지고 오도록 해야만 했습니다. 그래서 이 작업을 하기 위해서 일일히 추가해 주도록 합니다.

 

그리고 나서 일단 자식 프로세스에서는 위 스크린샷과 같이 그냥 TEst가 출력이 되도록 만들어 주도록 합니다. 이렇게 해서 우선은 자식 프로세스를 실행만 시키는 것에 중점을 주도록 합니다.

 

 

이렇게 해서 일차적인 목표였던 자식 프로세스의 작동까지는 성공적으로 작동을 하는 것을 확인할 수 있기는 있었습니다.

 

그래서 이번에는 좀 더 심화인 env경로만이 아니라, 아예 위 스크린샷처럼 먼저 waitForStarted()를 사용해서 먼저 시작하기를 기다려 주도록 합니다. 그리고 시작한 상태가 되면, QProcess.write()함수를 사용해서 자식 프로세스에 정보를 전달해야 합니다. 여기서 중요한 것은 뒤에 오는 closeWriteChannel()과 waitForFinished()라는 함수를 빼먹으면 오히려 작동이 잘 안됩니다.

 

그리고 여기가 중요한데, 이걸 어떻게 해서 받느냐 하면, 위 스크린샷에서 나와 있는 것처럼 sys.stdin.readline()이라는 함수를 사용해야 합니다.

 

이렇게 해서 위 gif파일에서 나와 있는 것처럼 제대로 자식 프로세스에 정보를 전달하는 과정까지는 성공적으로 마칠 수 있었습니다.

 

일단 다음의 목표는 여러개의 자식 프로세스를 한꺼번에 생성해서 돌리는 것이기 때문에, 위 스크린샷과 같이 우선 기존에 있던 QProcess에 관련된 코드는 주석처리 하였습니다.

 

그리고 나서 다음으로 해야 할일은 위 스크린샷에서 보이는 것처럼 for문을 이용해서 10개의 자식 프로세스를 어쩌면 차례대로, 어쩌면 한꺼번에 가까운 형태로 왕창 작동시켜 버리는 것 입니다.

 

이렇게 해서 10개의 자식 프로세스가 따로 실행이 되는 것을 확인할 수 있었습니다. 그리고 그것도 그냥 실행이 되는 것이 아니라, 제대로 정보가 부모 프로세스로 부터 전달이 되어서 작동을 하는 것 까지 확인을 할 수 있었습니다. 이렇게 해서 일단 작업의 첫 단계라고 해야 할지, 상당한 관문이 될 것으로 예상했는 단계가 생각외로 쉽게 풀리기는 풀렸습니다.

반응형