Pergunta

Eu estou tentando a granel gerar 4 thumnails para cada um dos cerca de 40k imagens com sorl- miniaturas para meu aplicativo django. I percorrer todos os objetos Django com um ImageWithThumbnailsFieldFile, e depois chamar seus generate_thumbnails () função.

Esta multa funciona, exceto que depois de algumas centenas de iterações, eu ficar sem memória e meu loop falhas com 'erro de memória'. Desde SORL-thumbnail utiliza PIL para gerar polegares, parece ser a de que PIL não retornar toda a memória que costumava quando gerado um polegar.

Alguém como evitar este problema, por exemplo, forçando PIL para retornar a memória não precisa de mais tempo?

meu código simplesmente se parece com isso:

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

A função de gerar miniaturas começa aqui , linha 129.

Agradecemos antecipadamente por qualquer conselho!

Martin

Foi útil?

Solução

Seu problema está relacionado à forma como Django armazena em cache os resultados de um queryset como você percorra-los. Django mantém todos os objetos na memória para que da próxima vez que você percorrer a mesma queryset você não tem que bater o banco de dados novamente para obter todos os dados.

O que você precisa fazer é usar a iterator () método. Assim:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top