Greg Ewing wrote:
> Nick Coghlan wrote:
> 
>> Generators are even more special, in that they only require finalisation in 
>> the first place if they're stopped on a yield statement inside a try-finally 
>> block.
> 
> I find it rather worrying that there could be a
> few rare cases in which my generators cause
> memory leaks, through no fault of my own and
> without my being able to do anything about it.

The GC changes PJE is looking at are to make sure you *can* do something about 
it. If the generator hasn't been started, or has already finished, then the GC 
won't consider it as needing finalisation.

> Will there be a coding practice one can follow
> to ensure that this doesn't happen?

I believe PJE's fix should take care of most cases (depending on how 
aggressive we can safely be, it may even take care of all of them). If there 
are any remaining cases, I think the main thing is to avoid keeping 
half-finished generators around:

from contextlib import closing

with closing(itr):
   # Use the iterator in here as you wish
   # secure in the knowledge it will be
   # cleaned up promptly when you are done
   # whether it is a file, a generator or
   # something with a database connection
   for item in itr:
       print item

Cheers,
Nick.

-- 
Nick Coghlan   |   [EMAIL PROTECTED]   |   Brisbane, Australia
---------------------------------------------------------------
             http://www.boredomandlaziness.org
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to