2009-09-18 19 views
5

Ho un semplice ciclo mutoDjango: iterazioni su una serie query senza cache di

for alias in models.Alias.objects.all() : 
    alias.update_points() 

ma guardando in Django QuerySet sembra mantenere intorno a un _result_cache di tutti i risultati precedenti. Questo sta mangiando concerti e concerti della mia macchina e alla fine tutto esplode.

Come posso buttare via tutto ciò che non mi interesserà mai?

+0

provare a non utilizzare alias come nome di variabile - è una parola chiave – uolot

+4

no, l'alias non è una parola chiave. – u0b34a0f6ae

risposta

11

Utilizzare il metodo del set di query iterator() per restituire i modelli a pezzi, senza popolare la cache risultato:

for alias in models.Alias.objects.iterator() : 
    alias.update_points() 
+4

Continua a masticare una tonnellata di RAM quando uso la tua chiamata. :( –

+1

E 'il fatto che la query mysql sia memorizzata nel buffer che sta causando tutti i problemi della ram. –

+3

Hai provato a impostare DEBUG su False? Vedi http://docs.djangoproject.com/en/dev/faq/models/ # why-is-django-leaking-memory Questo ha aiutato molto di più che usare un iteratore :) – pcv

0

Si dovrebbe considerare salvare le modifiche al database.

for alias in models.Alias.objects.all() : 
    alias.update_points() 
    alias.save() 
+1

beh, update_points() chiama save() –

Problemi correlati