У меня есть задача, которую нужно запускать для «большинства» объектов в моей базе данных один раз в определенный период времени (один раз в день, раз в неделю и т. ). В основном это означает, что у меня есть некоторый запрос, который выглядит так, как будто он выполняется в его собственном потоке.
for model_instance in SomeModel.objects.all():
do_something(model_instance)
(Обратите внимание, что на самом деле это фильтр (), а не все (), но, тем не менее, я все равно выбираю очень большой набор объектов.)
Проблема, с которой я столкнулся, заключается в том, что после некоторого времени работы поток прекращается моим хостинг-провайдером, потому что я использую слишком много памяти. Я предполагаю , что все это использование памяти происходит, потому что, хотя объект QuerySet
, возвращенный моим запросом, изначально имеет очень небольшой объем памяти, он в конечном итоге увеличивается по мере того, как QuerySet
объект кэширует каждый экземпляр_модели
, когда я просматриваю их.
Мой вопрос: «Как лучше всего перебирать почти все SomeModel
в моей базе данных с эффективным использованием памяти путь?" или, возможно, мой вопрос: «как мне« очистить кэш »экземпляров модели из набора запросов django?»
РЕДАКТИРОВАТЬ: Я фактически использую результаты набора запросов для создания серии новых объектов. Таким образом, я вообще не обновляю запрашиваемые объекты.