bpo-31581: Reduce the number of imports for functools (GH-3757)

This commit is contained in:
INADA Naoki 2017-09-30 16:13:02 +09:00 committed by GitHub
parent b24cd055ec
commit 9811e80fd0
2 changed files with 92 additions and 88 deletions

View file

@ -19,8 +19,7 @@ except ImportError:
pass
from abc import get_cache_token
from collections import namedtuple
from types import MappingProxyType
from weakref import WeakKeyDictionary
# import types, weakref # Deferred to single_dispatch()
from reprlib import recursive_repr
from _thread import RLock
@ -753,10 +752,14 @@ def singledispatch(func):
function acts as the default implementation, and additional
implementations can be registered using the register() attribute of the
generic function.
"""
# There are many programs that use functools without singledispatch, so we
# trade-off making singledispatch marginally slower for the benefit of
# making start-up of such applications slightly faster.
import types, weakref
registry = {}
dispatch_cache = WeakKeyDictionary()
dispatch_cache = weakref.WeakKeyDictionary()
cache_token = None
def dispatch(cls):
@ -803,7 +806,7 @@ def singledispatch(func):
registry[object] = func
wrapper.register = register
wrapper.dispatch = dispatch
wrapper.registry = MappingProxyType(registry)
wrapper.registry = types.MappingProxyType(registry)
wrapper._clear_cache = dispatch_cache.clear
update_wrapper(wrapper, func)
return wrapper