I am defining a single class with a destructor method that prints ‘__del__’, 
and running that source code string using exec with the module’s dict like so:

import rtmidi
import sys
import types
import time
import gc

s = """                                                                         
              
class A:                                                                        
              
    def __del__(self):                                                          
              
        print('__del__')                                                        
              
a = A()                                                                         
              
"""

m = types.ModuleType('mine')
exec(s, m.__dict__)
print('deleting...')
m = None
print('done')

and the output is:

deleting...
done
__del__

I the “__del__" to come between “deleting…” and “done”. This is not being run 
from the interactive interpreter by via a .py file.

> On Nov 23, 2014, at 12:56 AM, Ian Kelly <ian.g.ke...@gmail.com> wrote:
> 
> On Sun, Nov 23, 2014 at 2:48 AM, Ian Kelly <ian.g.ke...@gmail.com> wrote:
>> On Sat, Nov 22, 2014 at 11:49 PM, Patrick Stinson <patrickk...@gmail.com> 
>> wrote:
>>> If I create a module with imp.new_module(name), how can I unload it so that 
>>> all the references contained in it are set to zero and the module is 
>>> deleted? deleting the reference that is returned doesn’t seem to do the 
>>> job, and it’s not in sys.modules, so where is the dangling reference?
>> 
>> How are you determining that the module is not deleted?
> 
> From my testing, using Python 3.4:
> 
>>>> for i in range(5): imp.new_module('spam')
> ...
> <module 'spam'>
> <module 'spam'>
> <module 'spam'>
> <module 'spam'>
> <module 'spam'>
>>>> import gc, types
>>>> [m for m in gc.get_objects() if isinstance(m, types.ModuleType) and 
>>>> m.__name__ == 'spam']
> [<module 'spam'>]
>>>> 42
> 42
>>>> [m for m in gc.get_objects() if isinstance(m, types.ModuleType) and 
>>>> m.__name__ == 'spam']
> []
> 
> In this case one of the created modules was hanging around because it
> was still referenced by the special "_" variable of the interactive
> interpreter. Evaluating a new expression cleared that out and deleted
> the module. Maybe you're seeing the same thing.
> -- 
> https://mail.python.org/mailman/listinfo/python-list

-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to