mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #23839: Various caches now are cleared before running every test file.
This commit is contained in:
commit
684cadaef9
3 changed files with 89 additions and 27 deletions
|
@ -122,17 +122,9 @@ def dash_R(the_module, test, indirect_test, huntrleaks):
|
||||||
|
|
||||||
def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
||||||
import gc, copyreg
|
import gc, copyreg
|
||||||
import _strptime, linecache
|
import collections.abc
|
||||||
import urllib.parse, urllib.request, mimetypes, doctest
|
|
||||||
import struct, filecmp, collections.abc
|
|
||||||
from distutils.dir_util import _path_created
|
|
||||||
from weakref import WeakSet
|
from weakref import WeakSet
|
||||||
|
|
||||||
# Clear the warnings registry, so they can be displayed again
|
|
||||||
for mod in sys.modules.values():
|
|
||||||
if hasattr(mod, '__warningregistry__'):
|
|
||||||
del mod.__warningregistry__
|
|
||||||
|
|
||||||
# Restore some original values.
|
# Restore some original values.
|
||||||
warnings.filters[:] = fs
|
warnings.filters[:] = fs
|
||||||
copyreg.dispatch_table.clear()
|
copyreg.dispatch_table.clear()
|
||||||
|
@ -159,6 +151,23 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
||||||
obj._abc_cache.clear()
|
obj._abc_cache.clear()
|
||||||
obj._abc_negative_cache.clear()
|
obj._abc_negative_cache.clear()
|
||||||
|
|
||||||
|
clear_caches()
|
||||||
|
|
||||||
|
# Collect cyclic trash and read memory statistics immediately after.
|
||||||
|
func1 = sys.getallocatedblocks
|
||||||
|
func2 = sys.gettotalrefcount
|
||||||
|
gc.collect()
|
||||||
|
return func1(), func2(), fd_count()
|
||||||
|
|
||||||
|
|
||||||
|
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
|
# Flush standard output, so that buffered data is sent to the OS and
|
||||||
# associated Python objects are reclaimed.
|
# associated Python objects are reclaimed.
|
||||||
for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__):
|
for stream in (sys.stdout, sys.stderr, sys.__stdout__, sys.__stderr__):
|
||||||
|
@ -166,20 +175,74 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
||||||
stream.flush()
|
stream.flush()
|
||||||
|
|
||||||
# Clear assorted module caches.
|
# Clear assorted module caches.
|
||||||
_path_created.clear()
|
# Don't worry about resetting the cache if the module is not loaded
|
||||||
re.purge()
|
|
||||||
_strptime._regex_cache.clear()
|
|
||||||
urllib.parse.clear_cache()
|
|
||||||
urllib.request.urlcleanup()
|
|
||||||
linecache.clearcache()
|
|
||||||
mimetypes._default_mime_types()
|
|
||||||
filecmp._cache.clear()
|
|
||||||
struct._clearcache()
|
|
||||||
doctest.master = None
|
|
||||||
try:
|
try:
|
||||||
import ctypes
|
distutils_dir_util = sys.modules['distutils.dir_util']
|
||||||
except ImportError:
|
except KeyError:
|
||||||
# Don't worry about resetting the cache if ctypes is not supported
|
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
|
pass
|
||||||
else:
|
else:
|
||||||
ctypes._reset_cache()
|
ctypes._reset_cache()
|
||||||
|
@ -192,11 +255,7 @@ def dash_R_cleanup(fs, ps, pic, zdc, abcs):
|
||||||
for f in typing._cleanups:
|
for f in typing._cleanups:
|
||||||
f()
|
f()
|
||||||
|
|
||||||
# Collect cyclic trash and read memory statistics immediately after.
|
|
||||||
func1 = sys.getallocatedblocks
|
|
||||||
func2 = sys.gettotalrefcount
|
|
||||||
gc.collect()
|
gc.collect()
|
||||||
return func1(), func2(), fd_count()
|
|
||||||
|
|
||||||
|
|
||||||
def warm_caches():
|
def warm_caches():
|
||||||
|
|
|
@ -7,7 +7,7 @@ import time
|
||||||
import traceback
|
import traceback
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
from test.libregrtest.refleak import dash_R
|
from test.libregrtest.refleak import dash_R, clear_caches
|
||||||
from test.libregrtest.save_env import saved_test_environment
|
from test.libregrtest.save_env import saved_test_environment
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,6 +146,7 @@ def runtest_inner(ns, test, display_failure=True):
|
||||||
else:
|
else:
|
||||||
# Always import it from the test package
|
# Always import it from the test package
|
||||||
abstest = 'test.' + test
|
abstest = 'test.' + test
|
||||||
|
clear_caches()
|
||||||
with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment:
|
with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment:
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
the_module = importlib.import_module(abstest)
|
the_module = importlib.import_module(abstest)
|
||||||
|
|
|
@ -443,6 +443,8 @@ Tools/Demos
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #23839: Various caches now are cleared before running every test file.
|
||||||
|
|
||||||
- Issue #26944: Fix test_posix for Android where 'id -G' is entirely wrong or
|
- Issue #26944: Fix test_posix for Android where 'id -G' is entirely wrong or
|
||||||
missing the effective gid.
|
missing the effective gid.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue