import collections # Import after _weakref to avoid circular import.
import sys
import itertools
-import atexit
ProxyTypes = (ProxyType, CallableProxyType)
_shutdown = False
_index_iter = itertools.count()
_dirty = False
+ _registered_with_atexit = False
class _Info:
__slots__ = ("weakref", "func", "args", "kwargs", "atexit", "index")
def __init__(self, obj, func, *args, **kwargs):
+ if not self._registered_with_atexit:
+ # We may register the exit function more than once because
+ # of a thread race, but that is harmless
+ import atexit
+ atexit.register(self._exitfunc)
+ finalize._registered_with_atexit = True
info = self._Info()
info.weakref = ref(obj, self)
info.func = func
finalize._shutdown = True
if reenable_gc:
gc.enable()
-
-atexit.register(finalize._exitfunc)