Andrei Daraschenka <[email protected]> added the comment:
Hello zd nex
After a little research, it became clear that this drop is due to vague garbage
collection behavior. As you know, method `__del__` is called by the garbage
collector and when this happens there is no guarantee that the rest of the
objects are not yet cleaned.
def __del__(self):
if not hasattr(self, 'writeback'):
return
self.close()
But in the `close` method, synchronization with the disk occurred and objects
were created for modules that were no longer in memory and, as a result, method
`dump` fell with an error, because when trying to get module `pickle` it was
already gone (due to the garbage collector).
Modules/_pickle.c
....
4353 PickleState *st = _Pickle_GetGlobalState();
....
But `_Pickle_GetGlobalState` can't return right result because pickle module
was gone from memory by garbage collector.
In this case, you encountered a problem when the C code tried to use a module
that was no longer in memory since this module deleted the garbage collector.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue39672>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com