Django South 迁移内存泄漏
我正在运行 Django 1.2.1 和 South 0.7.2 且 DEBUG = False。 仍然是一个非常简单的数据迁移泄漏内存:
def forwards(self, orm):
for tr in orm.TestResult.objects.all():
tr.software = tr.test_result.test_run.software
tr.save()
TestResults 的数量相当大,但是除了长时间运行之外,这不应该是一个真正的问题。不幸的是,这个进程一直增长,直到我的机器内存不足。
I am running Django 1.2.1 with South 0.7.2 and DEBUG = False.
Still a very simple data migration leaks memory:
def forwards(self, orm):
for tr in orm.TestResult.objects.all():
tr.software = tr.test_result.test_run.software
tr.save()
The amount of TestResults is pretty big, but that should not be a real problem besides a long runtime. Unfortunately the process grows till my machine is out of memory.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我终于找到了解决我的问题的方法,以避免在 QuerySet 中进行缓存:
这里已经有人询问了:
Django:迭代没有缓存的查询集
以及Django文档中的解释:
http://docs.djangoproject.com/en/dev/ref/models/querysets/#iterator
I finally found the solution to my problem to avoid the caching in the QuerySet:
It was already asked on SO here:
Django : Iterate over a query set without cache
and the explanation in the Django docs:
http://docs.djangoproject.com/en/dev/ref/models/querysets/#iterator
我认为在您的情况下,最好对所有对象执行 sql upate 查询,而不是一一更新记录。您可以将
execute
与 sql 语句一起使用像这个(我不知道你正在使用什么数据库或数据结构,所以这只是一个例子):I think it's better in your case to execute an sql upate query on all objects instead of updatnig records one by one. You can use
execute
with an sql statement like this one (I don't know what database or data stucture you're using, so this is just an example):