본문 바로가기

컴퓨터 관련/문제해결

matplotlib 메모리 누수 시, 시도해볼만한 것들

728x90
반응형
  • 문제사항: matplotlib를 통해, 반복문으로 수 백개 단위의 plot을 출력 및 저장할 때, 메모리 오류로 코드가 정지됨

  • 해결방안
    • 방법 1: 가비지 컬랙터와 close() 사용
import matplotlib.pyplot as plt
import gc

fig = plt.plot()

fig.close() # 현재 figure를 삭제한다.
gc.collect() # 할당이 해제된 메모리 공간을 강제로 회수한다.​
  • 방법 2: Figure 전체를 지워버리는 방법[1]
import matplotlib.pyplot as plt

fig = plt.plot()

fig.close('all') # 모든 figure를 삭제한다.
plt.clf() # figure 창 내의 plot을 지우기
  • 방법3: use(“agg”) 코드 사용[2][3]
import matplotlib 
matplotlib.use("agg")
  • 다른 방법은 효과 없고, 이 방법이 가장 효과 있었다.
  • 알고보니 close()라는 함수가 fig 객체에 대한 메모리 공간을 회수해야 하지만, 이를 하지 못하는 버그가 있어 생긴 문제 였다.[3] 이는 Windows 환경에서 GUI Backend를 사용하며 발생하는 버그로, use(“agg”)는 Non-GUI Backend를 사용하도록 하는 함수이다.
  • 따라서, 1,2번이 안 된다면, 3번 방법을 사용하면 된다.

반응형