【发布时间】:2011-09-10 10:39:14
【问题描述】:
我需要在一个大的(5m 行)django 表中添加一个新列。我有一个创建新列的南schemamigration。现在我正在编写一个datamigration 脚本来填充新列。它看起来像这样。 (如果您不熟悉南迁移,请忽略模型名称前缀的 orm.。)
print "Migrating %s articles." % orm.Article.objects.count()
cnt = 0
for article in orm.Article.objects.iterator():
if cnt % 500 == 0:
print " %s done so far" % cnt
# article.newfield = calculate_newfield(article)
article.save()
cnt += 1
我从objects.all 切换到objects.iterator 以减少内存需求。但是当我运行这个脚本时,仍然有一些东西在消耗大量内存。即使如上所述注释掉了实际有用的行,脚本仍然会增长到使用 10+ GB 的内存,然后才能通过表格很远,我放弃了。
似乎有什么东西在内存中保留这些对象。我怎样才能运行它,这样它就不会占用内存?
FWIW,我正在使用 python 2.6、django 1.2.1、South 0.7.2、mysql 5.1。
【问题讨论】:
标签: python django performance django-models django-south