2009-09-18 15 views
5

बिना एक प्रश्न सेट पर दोहराएं मैं एक गूंगा सरल पाशDjango: कैश

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

लेकिन Django में देख क्वेरीसमूह यह सभी पिछले परिणामों के एक _result_cache के आसपास रखने के लिए लगता है की है। यह मेरी मशीन के गिग और गिग खा रहा है और आखिरकार सब कुछ उड़ाता है।

मैं उन सभी चीजों को कैसे फेंक सकता हूं जिनकी मुझे कभी परवाह नहीं है?

+0

बजाय एक चर नाम के रूप में उपनाम का उपयोग न करने का प्रयास करें - यह एक कीवर्ड – uolot

+4

नहीं है, उपनाम कोई कीवर्ड नहीं है। – u0b34a0f6ae

उत्तर

11

परिणाम कैश को आबाद करने के बिना, मात्रा में मॉडल वापस जाने के लिए क्वेरीसमूह के iterator() विधि का उपयोग करें:

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

जब भी मैं आपकी कॉल का उपयोग करता हूं तो यह अभी भी रैम के एक टन के माध्यम से चबाने वाला है। :( –

+1

यह तथ्य है कि mysql क्वेरी buffered है जो सभी राम समस्या का कारण बन रही है। –

+3

क्या आपने DEBUG को गलत पर सेट करने का प्रयास किया है? Http://docs.djangoproject.com/en/dev/faq/models/ देखें # why-is-django-leaking-memory यह एक iterator का उपयोग करने से कहीं अधिक मदद करता है :) – pcv

0

आप अपने परिवर्तनों को डेटाबेस के लिए बचत पर विचार करना चाहिए।

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

अच्छी तरह से, update_points() कॉल सेव() –

संबंधित मुद्दे