[PIL] CPU bottleneck, memory leak 현상

Image 를 한장 한장 읽어와서 처리해주어야 하는 코드를 돌리는데, 자꾸 메모리가 누수되는 문제에 직면하였다. htop 해보면 해당 Mem 부분이 꽉 찬 채로 프로세스가 멈춰버리는 문제이다.

구글링을 해보니 pillow(PIL) 라이브러리를 사용할 때, image 를 .open() 이라는 함수로 읽었는데, 이렇게 할 경우 close() 로 닫아주어야 메모리 누수가 없다고 한다.

또 다른 방법으로는 with oepn 형태로 읽어들이면 된다는 것이었다.

하지만! 이 방법으로는 문제를 해결할 수 없으니 아래 내용 안봐도 됩니다! 이미지를 많이 처리해야 할 경우, 메모리가 적을 경우에는 그냥 바로 opencv, cv2 로 이미지 처리 하십시오..!!!

시도해본 방법!

기존 코드는, 단순히 open 하는 형태

image = Image.open(image)


먼저 with open 형식으로 바꾸어 주었다.

image

뭔가 이미지 처리시간은 빨라진 것 같다 !! 신기한 발견 ㅎㅎ

그런데 메모리는 차곡차곡 올라가는게.. 위험하다.. (쌓여가는 memory..)

image

결국..! 멈췄다

image


with open 형식으로는 메모리가 여전히 쌓여가는 것 같아서 다시 close() 함수를 써서 테스트 해보았다.

간단하다, 읽어들인 이미지 다시 close 해줌

img.close()

이 방법도 정답은 아니었다..

결국엔 opencv 로 imread 해주고~ 이미지 전처리 해주는 방식으로 사용하였다.. 전혀 memory leak 문제도 없고 깔끔하니 좋군..!

참고한 깃 이슈

댓글남기기