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

GUI 프리징(freezing)의 해결

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

안녕하세요?

 

정말로 오랜 시간이 걸리기는 걸렸습니다. 아무튼 간에 이번 포스팅에서야 말로 간단하고 정말 어이없이 간단한 이 해결책을 찾아내지 못해서 한참이나 헤메이게 되었는데, 그 내용의 종지부를 찍고자 합니다. 일단 여기까지가 2월 첫번째 일요일에 있었던 작업의 내용을 올리느라 밀리고 밀렸는 포스팅의 내용이었습니다.

 

먼저 인터넷을 뒤지다가 위 스크린샷처럼 QApplication.processEvent()라는 명령어를 for루프-문이나 이런 반복문에 넣어줘야 반응을 기다리는 상태가 된다고 합니다.

 

그래서 먼저 이를 위해서 __init__()에 먼저 QApplication.processEvents()를 방금전까지 QThread를 연습했던 구문에 넣어 주도록 합니다.

 

그리고 나서 먼저 for 문 안에다가 위 스크린샷과 같은 QApplication.processEvents()라는 구문을 넣어서 for 루프가 계속 돌고 있어도 반응을 할 수 있도록 만들어 줍니다.

 

다음으로는 while 문 안에다가 설치를 해 주는 것으로 해서, 작업을 마무리 하도록 합니다. 이렇게 해서 일단 실행을 시켜 보기는 보았습니다.

 

 

그런데 무언가가 제대로 되지 않았는지 일단 실행을 시켜 보니까, 반응이 다시 살아나기는 커녕, 그대로 종료가 되어 버리는 것을 확인할 수 있었습니다. 아무래도 QThread를 작동시키는 이 구문에 어떻게 적용은 가능한데, 굳이 이렇게 복잡하게 되어 버린 코드를 쓰기 보다, 그냥 기존의 py파일에다가 한번 QApplication.processEvents()를 넣는 것으로 선회하였습니다.

 

그래서 먼저 DataBaseReader.py로 가서, 이 QApplication.processEvents()라는 것을 넣어주는 작업에 들어가 보도록 합니다.

 

그렇게 해서 이번에는 for루프의 시작 부분만이 아니라 끝 부분등에 여러군에 군데군데 박아 주도록 합니다. 아마 이것 때문에 결과가 바뀔 수도 있다는 생각이 들기는 듭니다.

 

특히나 while문이 끝나는 시점에서도 이렇게 하나하나 주는 식으로 해서, 이렇게 작업을 하도록 합니다. 이게 이전과는 다른 포인트라면 포인트 이기는 합니다.

 

이렇게 해서 일단 제대로 무사히 작동을 하는 것 까지는 확인을 할 수 있기는 있었습니다. 그럼 결과는 문제없이 나오는지 아닌지 보도록 합니다.

 

그리고 나서 한번 확인을 해 보았더니, 제대로 결과가 그림파일과 데이터 베이스로 저장이 된 것을 확인할 수 있기는 있었습니다. 이제 이것으로 일차적인 것은 확인을 하였고 가장 중요한 것을 확인하러 가 봅니다.

 

이렇게 하는 것으로 이제 접었다가 펴거나 다른 곳을 클릭해도 이 GUI가 프리징이 되지 않는 다는 것을 보여줄 수 있었습니다. 이렇게 해서 일단 해결은 되었는데, 이래저래 밀린 작업이 아직도 많이 있습니다. 그래서 하는 수 없이 엄청나게 쌓인 결과를 모두 포스팅으로 올리고, 이제부터 새로운 작업을 하러 가 봐야 겠습니다.

반응형