본문 바로가기

Python

Python Multiprocessing 작업하며 발생한 이슈들 정리

320x100
320x100

 

1. Queue에서 get( )을 해줘도 Memory 반납이 안 되는 현상

 DICOM을 PNG로 변환하는 과정에서 속도 좀 올리려고 Multiprocessing 작업을 하던 중에 Queue( )도 사용하게 됐는데, 이 놈이 get( )을 하면 메모리 반납도 같이 해줘야하는데 계속 들고 있어서 서버가 터지기 직전까지 간 적이 있다. 2~3일 구글링 끝에 원인을 찾게 됐다. Numpy version 문제였다. 1.16에서 1.18로 바꾸니까 잘 되더라.

 

 이 글이 나 같은 현상을 겪는 사람들에게 얼른 노출이 되어 도움이 되길 바라며...

 

https://stackoverflow.com/questions/54419043/memory-use-if-multiprocessing-queue-is-not-used-by-two-separate-processes

https://github.com/numpy/numpy/issues/12793

 

 

2. Process 사용 할 때 무한루프로 빠지는 것도 아닌데 Process 종료가 안 되는 현상

Process 간의 통신을 위해 Queue를 사용했는데, Process 종료 시점이 Queue가 너무 많이 차 있으면 종료가 안 됨. Process 종료 시키는 부분에서 Queue에 대한 작업도 추가하니 해결 됨.

 

 

 

 

 

 

  • webnautes 2022.08.02 10:59 신고

    검색하다가 찾았습니다. 저도 Process와 큐를 같이 사용해서 종료가 안되나 봅니다. 어떤 처리를 하셨는지 알 수 있을까요?

    • ballentain 2022.08.02 15:09 신고

      안녕하세요!
      저는 queue에 맨 마지막으로 'END'라는 string 데이터를 end flag로 넣어줬습니다.
      그리고 Process가 queue.get( )을 통해 데이터 받아다가 처리하다가 'END' 값을 만나게 되면 break로 while문을 종료시켜서 최종적으로 process가 종료되도록 설정했습니다.

      그리고 만약 queue를 2개 이상 사용하시는 거면, process가 종료되기 전에 모든 queue를 비워줘야 정상적으로 종료되는 듯 합니다!

    • webnautes 2022.08.02 18:49 신고

      감사합니다~~