title: Limiting Memory Use in a *Large* Django QuerySet
body: <p>I have a task which needs to be run on 'most' objects in my database once every some period of time (once a day, once a week, whatever). Basically this means that I have some query that looks like this running in it's own thread.</p>
  
  <pre><code>for model_instance in SomeModel.objects.all():
      do_something(model_instance)
  </code></pre>
  
  <p>(Note that it's actually a filter() not all() but none-the-less I still end up selecting a <em>very large</em> set of objects.)</p>
  
  <p>The problem I'm running into is that after running for a while the thread is killed by my hosting provider because I'm using too much memory. I'm <em>assuming</em> all this memory use is happening because even though the <code>QuerySet</code> object returned by my query initially has a very small memory footprint it ends up growing as the <code>QuerySet</code> object caches each <code>model_instance</code> as I iterate through them.</p>
  
  <p>My question is, "what is the best way to iterate through almost every <code>SomeModel</code> in my database in a memory efficient way?" or perhaps my question is "how do I 'un-cache' model instances from a django queryset?"</p>
  
  <p><strong>EDIT: I'm actually using the results of the queryset to build a series of new objects. As such, I don't end up updating the queried-for objects at all.</strong></p>