Frage

Ich bin zu bulk versuchen 4 thumnails für jede von rund 40k Bilder erzeugen mit sorl- Thumbnail für meine django app. Ich durchlaufen alle django Objekte mit einem ImageWithThumbnailsFieldFile, und dann seine generate_thumbnails () Funktion aufrufen.

Das funktioniert gut, außer dass nach ein paar hundert Iterationen, ich laufe aus der Erinnerung und meine Schleife stürzt mit ‚Speicherfehler‘. Da SORL-Thumbnail-PIL verwendet Daumen zu erzeugen, so scheint es zu sein, dass PIL die gesamten Speicher nicht zurückgibt es verwendet wird, wenn ein Bild erzeugt wird.

Hat jemand, wie dieses Problem zu vermeiden, z.B. durch Erzwingen PIL den Speicher nicht mehr braucht?

zurück

mein Code einfach sieht wie folgt aus:

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

Die Funktion generate-Thumbnail beginnt hier , Linie 129.

Vielen Dank im Voraus für jede Beratung!

Martin

War es hilfreich?

Lösung

Ihr Problem bezieht sich auf wie Django die Ergebnisse einer queryset wie Sie Schleife durch sie zwischenspeichert. Django hält alle Objekte im Speicher, so dass beim nächsten Mal, wenn Sie die gleiche queryset durchlaufen Sie die Datenbank getroffen haben wieder nicht alle Daten zu erhalten.

Was Sie tun müssen, ist verwenden, um das iterator () Methode. Also:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top