On Jun 28, 6:21 pm, Nick Coghlan <[EMAIL PROTECTED]> wrote: > Eyal Lotem wrote: > > Example: > > > import os > > class RunningFile(object): > > filename = '/tmp/running' > > def __init__(self): > > open(self.filename, 'wb') > > def __del__(self): > > os.unlink(self.filename) > > running_file = RunningFile() > > > The deller object is in a cycle as described above [as well as the > > Deller class itself]. When Python exits, it could call > > deller.__del__() and then collect the cycle. But Python does the wrong > > thing here, and gets rid of the globals before calling __del__: > > Exception exceptions.AttributeError: "'NoneType' object has no > > attribute 'unlink'" in <bound method RunningFile.__del__ of > > <__main__.RunningFile object at 0x7f9655eb92d0>> ignored > > I don't know what you're trying to get at with this example. There isn't > any cyclic GC involved at all, just referencing counting. And before the > module globals are cleared, running_file is still referenced, so calling > its __del__ method early would be an outright error in the interpreter > (as far as I know, getting __del__ methods to run is one of the > *reasons* for clearing the module globals). > > It's a fact of Python development: __del__ methods cannot safely > reference module globals, because those globals may be gone by the time > that method is invoked. That's because globals are being cleaned up in an ad-hoc manner, instead of just using cyclic GC that supports cycles.
> > Cheers, > Nick. > > -- > Nick Coghlan | [EMAIL PROTECTED] | Brisbane, Australia > --------------------------------------------------------------- > http://www.boredomandlaziness.org > _______________________________________________ > Python-Dev mailing list > [EMAIL PROTECTED]://mail.python.org/mailman/listinfo/python-dev > Unsubscribe:http://mail.python.org/mailman/options/python-dev/python-dev2-garchiv... _______________________________________________ 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