2

약 40k 이미지 각각에 대해 4 장의 thumnails를 생성하려고합니다. 내 django 앱의 경우 sorl-thumbnail입니다. 모든 장고 객체를 ImageWithThumbnailsFieldFile로 반복하고 generate_thumbnails() 함수를 호출합니다.Django/Python/PIL/sorl-thumbnail 생성 대량 메모리 오류

몇 백 회 반복 한 후 메모리가 부족하여 루프가 '메모리 오류'와 충돌한다는 점을 제외하고는 정상적으로 작동합니다. sorl-thumbnail은 PIL을 사용하여 엄지 손가락을 생성하기 때문에 PIL이 엄지 손가락을 생성 할 때 사용한 모든 메모리를 반환하지 않는 것으로 보입니다.

아무도 어떻게이 문제를 피할 수 있습니까? PIL이 더 이상 필요없는 메모리를 반환하도록 강요함으로써?

내 코드는 단순히 다음과 같습니다

all = Picture.objects.all() 
for i in all: 
    i.image.generate_thumbnails() 

기능 생성 - 축소판 here 시작, 라인 어떤 조언에 미리 129

감사합니다!

마틴

답변

4

귀하의 문제는 장고 그들을 통해 당신 루프로의 검색어의 결과를 캐시하는 방법에 관한 것이다. Django는 모든 객체를 메모리에 유지하므로 다음 번에 같은 쿼리 세트를 반복 할 때 모든 데이터를 얻기 위해 데이터베이스에 다시 도달 할 필요가 없습니다.

iterator() 방법을 사용하면됩니다. 그래서 : 대답에 대한

all = Picture.objects.all().iterator() 
for i in all: 
    i.image.generate_thumbnails() 
+0

덕분에, 그것은 매력처럼 작동, 당신의 코드를 읽어해야한다고 생각 : = Picture.objects..iterator()가 – Hoff

+0

업데이트 모든 - 죄송합니다, 나는 가장 중요한 중단 같아요 부품. – sheats