bpo-36485: Add sys.clear_caches(). by serhiy-storchaka · Pull Request #12632 · python/cpython
Expand Up
@@ -136,7 +136,8 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
zipimport._zip_directory_cache.update(zdc)
# clear type cache sys._clear_type_cache() if hasattr(sys, '_clear_type_cache'): sys._clear_type_cache()
# Clear ABC registries, restoring previously saved ABC registries. abs_classes = [getattr(collections.abc, a) for a in collections.abc.__all__] Expand All @@ -160,98 +161,13 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): def clear_caches(): import gc
# Clear the warnings registry, so they can be displayed again for mod in sys.modules.values(): if hasattr(mod, '__warningregistry__'): del mod.__warningregistry__
# Flush standard output, so that buffered data is sent to the OS and # associated Python objects are reclaimed. for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__): if stream is not None: stream.flush()
# Clear assorted module caches. # Don't worry about resetting the cache if the module is not loaded try: distutils_dir_util = sys.modules['distutils.dir_util'] except KeyError: pass else: distutils_dir_util._path_created.clear() re.purge()
try: _strptime = sys.modules['_strptime'] except KeyError: pass else: _strptime._regex_cache.clear()
try: urllib_parse = sys.modules['urllib.parse'] except KeyError: pass else: urllib_parse.clear_cache()
try: urllib_request = sys.modules['urllib.request'] except KeyError: pass else: urllib_request.urlcleanup()
try: linecache = sys.modules['linecache'] except KeyError: pass else: linecache.clearcache()
try: mimetypes = sys.modules['mimetypes'] except KeyError: pass else: mimetypes._default_mime_types()
try: filecmp = sys.modules['filecmp'] except KeyError: pass else: filecmp._cache.clear()
try: struct = sys.modules['struct'] except KeyError: pass else: struct._clearcache()
try: doctest = sys.modules['doctest'] except KeyError: pass else: doctest.master = None
try: ctypes = sys.modules['ctypes'] except KeyError: pass else: ctypes._reset_cache()
try: typing = sys.modules['typing'] except KeyError: pass else: for f in typing._cleanups: f()
sys.clear_caches() gc.collect()
Expand Down
# clear type cache sys._clear_type_cache() if hasattr(sys, '_clear_type_cache'): sys._clear_type_cache()
# Clear ABC registries, restoring previously saved ABC registries. abs_classes = [getattr(collections.abc, a) for a in collections.abc.__all__] Expand All @@ -160,98 +161,13 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs): def clear_caches(): import gc
# Clear the warnings registry, so they can be displayed again for mod in sys.modules.values(): if hasattr(mod, '__warningregistry__'): del mod.__warningregistry__
# Flush standard output, so that buffered data is sent to the OS and # associated Python objects are reclaimed. for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__): if stream is not None: stream.flush()
# Clear assorted module caches. # Don't worry about resetting the cache if the module is not loaded try: distutils_dir_util = sys.modules['distutils.dir_util'] except KeyError: pass else: distutils_dir_util._path_created.clear() re.purge()
try: _strptime = sys.modules['_strptime'] except KeyError: pass else: _strptime._regex_cache.clear()
try: urllib_parse = sys.modules['urllib.parse'] except KeyError: pass else: urllib_parse.clear_cache()
try: urllib_request = sys.modules['urllib.request'] except KeyError: pass else: urllib_request.urlcleanup()
try: linecache = sys.modules['linecache'] except KeyError: pass else: linecache.clearcache()
try: mimetypes = sys.modules['mimetypes'] except KeyError: pass else: mimetypes._default_mime_types()
try: filecmp = sys.modules['filecmp'] except KeyError: pass else: filecmp._cache.clear()
try: struct = sys.modules['struct'] except KeyError: pass else: struct._clearcache()
try: doctest = sys.modules['doctest'] except KeyError: pass else: doctest.master = None
try: ctypes = sys.modules['ctypes'] except KeyError: pass else: ctypes._reset_cache()
try: typing = sys.modules['typing'] except KeyError: pass else: for f in typing._cleanups: f()
sys.clear_caches() gc.collect()
Expand Down