我有一個愚蠢的簡單循環Django的:遍歷查詢集而不緩存
for alias in models.Alias.objects.all() :
alias.update_points()
但尋找到Django的查詢集,似乎把所有以前的結果的_result_cache
左右。這是吃我的機器的演出和吉格斯,最終一切都炸了。
我該如何扔掉所有我永遠不會在乎的東西?
我有一個愚蠢的簡單循環Django的:遍歷查詢集而不緩存
for alias in models.Alias.objects.all() :
alias.update_points()
但尋找到Django的查詢集,似乎把所有以前的結果的_result_cache
左右。這是吃我的機器的演出和吉格斯,最終一切都炸了。
我該如何扔掉所有我永遠不會在乎的東西?
使用查詢集的iterator()
方法返回成塊的模型,不填充結果緩存:
for alias in models.Alias.objects.iterator() :
alias.update_points()
當我使用你的電話時,它仍然咀嚼大量的RAM。 :( – 2009-09-18 08:52:33
這是事實,mysql查詢緩衝,導致所有內存故障。 – 2009-09-19 14:25:52
您是否嘗試將DEBUG設置爲False?請參閱http://docs.djangoproject.com/en/dev/faq/models/ #why-is-django-leaking-memory這比使用迭代器更有幫助:) – pcv 2011-03-19 20:13:40
你應該考慮保存更改回數據庫。
for alias in models.Alias.objects.all() :
alias.update_points()
alias.save()
好吧,update_points()調用save() – 2009-09-18 22:21:29
儘量不要使用別名作爲變量名 - 它是關鍵字 – uolot 2009-09-18 09:23:27
否,別名不是關鍵字。 – u0b34a0f6ae 2009-09-18 09:34:24