Джанго Южная миграция утечки памяти - PullRequest
3 голосов
/ 12 апреля 2011

Я использую Django 1.2.1 с югом 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 довольно велико, но это не должно быть реальной проблемой, кроме длительного времени выполнения. К сожалению, процесс растет, пока моей машине не хватает памяти.

Ответы [ 2 ]

3 голосов
/ 17 апреля 2014

Наконец-то я нашел решение своей проблемы, чтобы избежать кеширования в QuerySet:

for tr in orm.TestResult.objects.iterator() :
    tr.software = ...

Здесь уже задавался вопрос о SO:

Django: итерация понабор запросов без кеша

и пояснения в документации Django:

http://docs.djangoproject.com/en/dev/ref/models/querysets/#iterator

1 голос
/ 12 апреля 2011

Я думаю, в вашем случае лучше выполнить запрос sql upate для всех объектов, а не обновлять записи одну за другой. Вы можете использовать execute с оператором sql, подобным этому (я не знаю, какую базу данных или структуру данных вы используете, так что это всего лишь пример):

UPDATE TestResult
   SET TestResult.software = TestRun.software
  FROM TestResult JOIN TestRun
       ON TestResult.test_run_id = TestRun.id
...