Ограничение использования памяти в * Large * Django QuerySet

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

for model_instance in SomeModel.objects.all():
    do_something(model_instance)

(Обратите внимание, что на самом деле это фильтр (), а не все (), но, тем не менее, я все равно выбираю очень большой набор объектов.)

Проблема, с которой я столкнулся, заключается в том, что после некоторого времени работы поток прекращается моим хостинг-провайдером, потому что я использую слишком много памяти. Я предполагаю , что все это использование памяти происходит, потому что, хотя объект QuerySet , возвращенный моим запросом, изначально имеет очень небольшой объем памяти, он в конечном итоге увеличивается по мере того, как QuerySet объект кэширует каждый экземпляр_модели , когда я просматриваю их.

Мой вопрос: «Как лучше всего перебирать почти все SomeModel в моей базе данных с эффективным использованием памяти путь?" или, возможно, мой вопрос: «как мне« очистить кэш »экземпляров модели из набора запросов django?»

РЕДАКТИРОВАТЬ: Я фактически использую результаты набора запросов для создания серии новых объектов. Таким образом, я вообще не обновляю запрашиваемые объекты.

22
задан Chris W. 1 February 2011 в 19:17
поделиться