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

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

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

안녕하세요?

 

지난번 포스팅에서 얼추 그럭저럭 만족할 만하게 돌아갈 프로그램을 만드는 데는 성공했습니다만, 문제는 아직 100%는 아니라고 할까 이래저래 문제가 많이 남아 있습니다. 그래서 이번 포스팅에서는 자동으로 자식 프로세스를 종료시킬 수 있는 방법을 찾아 보고자 합니다.

 

ㅁ너저 자식 프로세스에서 다 끝이 났다는 생각이 들면, 위 스크린샷에서 볼 수 있는 것과 같이 그냥 quit()라는 함수를 추가해 주도록 합니다.

 

제대로 종료도 안되는 것은 물론이고, 거기다가 새로운 문제가 생겼습니다. 위 스크린샷에서 보이는 것처럼 직접 __init__()에 메인이 되는 메서드를 실행시키라고 하면, GUI가 아예 완료가 될때 까지 뜨지 않는 현상이 벌어졌습니다. 그래서 일단 위 스크린샷처럼 타이머를 두어서 일정 시간 이후에 메인이 되는 메서드를 실행시키는 방법을 사용했습니다.

 

이렇게 해서, 위 스크린샷처럼 어떻게 해서 GUI는 띄우는 데는 다시 성공할 수 있었습니다만, 문제는 progressBar가 제대로 동작하지 않는 문제점이 나왔습니다. 거기다가 이 GUI도 메인이 되는 부모 프로세스가 죽은 다음에 뜬다는 문제점이 있었습니다.

 

 

그래서 일단 위 스크린샷에서 볼 수 있는 것과 같이 일단 QTimer를 사용하느데 setInterval로 시간을 설정한 다음에, 타임아웃이 되면 연결할 메서드를 설정해 줍니다. 그리고 나서 start를 해주고, 메서드가 실행이 되면 stop을 주는 식으로 사용을 했습니다.

 

이렇게 해서 위 gif파일에서 나오는 것처럼 제대로 progressBar가 작동을 하였습니다. 그런데 이렇게 하고서도 완전 자동으로 종료는 되지 않았습니다.

 

그래서 이번에는 좀 더 극단적으로 app.exec_()를 제거하는 방향으로 움직여 보았습니다. 이렇게 했더니, 문제가 하나 생기기는 생겼습니다.

 

자식 메서드가 시작과 동시에 종료가 되어 버리는 초유의 사태가 생기는 것을 확인할 수 있기는 있었습니다. 아무래도 PyQt5를 이용하면, 다른 방법의 종료 메서드를 사용하는 듯 합니다.

 

그래서 이번에는 QApplication.quit()라는 옵션을 두는 것으로 시작을 하였으며, 여기서 나오는 코드를 가지고서 한번 테스트에 들어가 봅니다.

 

이번에야 말로 제대로 제 의도대로 실행이 되다가 자동으로 종료가 되는 것을 확인할 수 있었습니다. 다만 여기까지는 자식 프로세스를 단독으로 실행해서 얻은 결과라는 점이 문제는 문제입니다. 이를 제대로 확인하기 위한 작업이 아직 더 남아 있습니다.

반응형