Tengo una tarea que debe ejecutarse en la mayoría de los objetos en mi base de datos cada cierto período de tiempo (una vez al día, una vez por semana, lo que sea). Básicamente esto significa que tengo una consulta que se parece a esto ejecutándose en su propio hilo.Limitar la memoria Usar en un * Large * Django QuerySet
for model_instance in SomeModel.objects.all():
do_something(model_instance)
(Tenga en cuenta que en realidad es un filtro() no todos(), pero ninguno de los de menos todavía terminan la selección de un muy grande conjunto de objetos.)
El problema que estoy Me encuentro con que, después de correr por un tiempo, mi proveedor de alojamiento elimina el hilo porque estoy usando demasiada memoria. Estoy asumiendo todo este uso de la memoria está sucediendo porque aunque el objeto QuerySet
devuelto por mi consulta inicialmente tiene una huella de memoria muy pequeña, termina creciendo como el objeto QuerySet
almacena en caché cada model_instance
al iterar a través de ellos.
Mi pregunta es, "¿cuál es la mejor manera de iterar a través de casi SomeModel
en mi base de datos de una manera eficiente de la memoria?" o tal vez mi pregunta es "¿cómo puedo 'anular la caché' de las instancias del modelo desde un django queryset?"
EDITAR: Estoy usando los resultados del conjunto de preguntas para construir una serie de objetos nuevos. Como tal, no termino de actualizar los objetos consultados.
Deberá proporcionar alguna pista sobre lo que está haciendo con el conjunto de preguntas. Django tiene reglas, y varias operaciones requieren cargar todo el QuerySet en la memoria, donde otras operaciones simplemente procesan las filas de una en una. http://docs.djangoproject.com/en/1.2/topics/db/queries/#querysets-are-lazy. Proporcione alguna pista sobre cómo está utilizando sus objetos QuerySet. –
Lo siento, debería especificar que estoy usando la información de los objetos QuerySet para crear objetos nuevos (de un tipo diferente). Así que nunca actualizo los objetos que estoy buscando. –