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