Hi, While working on my FAT Python optimizer project, I found an annoying bug in my code. When at least one guard is created with a reference to the global namespace (globals(), the module dictionary), objects of the module are no more removed at exit. Example: --- import sys class MessageAtExit: def __del__(self): print('__del__ called') # display a message at exit, when message_at_exit is removed message_at_exit = MessageAtExit() # create a reference cycle: # module -> module dict -> Guard -> module dict guard = sys.Guard(globals()) --- (the code is adapted from a test of test_gc) Apply attached patch to Python 3.6 to get the sys.Guard object. It's a minimalist object to keep a strong reference to an object. I expected the garbage collector to break such (simple?) reference cycle. The Guard object implements a traverse module, but it is never called. Did I miss something obvious, or is it a known issue of the garbage collector on modules? Victor -------------- next part -------------- A non-text attachment was scrubbed... Name: guard.patch Type: text/x-patch Size: 3804 bytes Desc: not available URL: <http://mail.python.org/pipermail/python-dev/attachments/20160119/e8ac9ca6/attachment-0001.bin>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4