]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-109295: Clean up multiprocessing in test_asyncio and test_compileall (#109298)
authorVictor Stinner <vstinner@python.org>
Tue, 12 Sep 2023 01:31:15 +0000 (03:31 +0200)
committerGitHub <noreply@github.com>
Tue, 12 Sep 2023 01:31:15 +0000 (03:31 +0200)
test_asyncio and test_compileall now clean up multiprocessing by
calling multiprocessing _cleanup_tests(): explicitly clean up
resources and stop background processes like the resource tracker.

Lib/test/test_asyncio/test_events.py
Lib/test/test_compileall.py

index 30cc8fd80bfe9415df7c195a676c713753b2933f..1647d2308c4e3555747c037aca106ebe7fa785d3 100644 (file)
@@ -31,6 +31,7 @@ import asyncio
 from asyncio import coroutines
 from asyncio import events
 from asyncio import selector_events
+from multiprocessing.util import _cleanup_tests as multiprocessing_cleanup_tests
 from test.test_asyncio import utils as test_utils
 from test import support
 from test.support import socket_helper
@@ -2765,6 +2766,8 @@ class GetEventLoopTestsMixin:
             # multiprocessing.synchronize module cannot be imported.
             support.skip_if_broken_multiprocessing_synchronize()
 
+            self.addCleanup(multiprocessing_cleanup_tests)
+
             async def main():
                 if multiprocessing.get_start_method() == 'fork':
                     # Avoid 'fork' DeprecationWarning.
index df7c5122b3b1f5316a043dd63966e4520b2c2b5a..9cd92ad365c5a90f1a569927bfa717917c5b23ca 100644 (file)
@@ -18,6 +18,7 @@ from unittest import mock, skipUnless
 try:
     # compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists
     # and it can function.
+    from multiprocessing.util import _cleanup_tests as multiprocessing_cleanup_tests
     from concurrent.futures import ProcessPoolExecutor
     from concurrent.futures.process import _check_system_limits
     _check_system_limits()
@@ -54,6 +55,8 @@ class CompileallTestsBase:
 
     def setUp(self):
         self.directory = tempfile.mkdtemp()
+        self.addCleanup(shutil.rmtree, self.directory)
+
         self.source_path = os.path.join(self.directory, '_test.py')
         self.bc_path = importlib.util.cache_from_source(self.source_path)
         with open(self.source_path, 'w', encoding="utf-8") as file:
@@ -66,9 +69,6 @@ class CompileallTestsBase:
         self.source_path3 = os.path.join(self.subdirectory, '_test3.py')
         shutil.copyfile(self.source_path, self.source_path3)
 
-    def tearDown(self):
-        shutil.rmtree(self.directory)
-
     def add_bad_source_file(self):
         self.bad_source_path = os.path.join(self.directory, '_test_bad.py')
         with open(self.bad_source_path, 'w', encoding="utf-8") as file:
@@ -307,9 +307,13 @@ class CompileallTestsBase:
             script_helper.make_script(path, "__init__", "")
             mods.append(script_helper.make_script(path, "mod",
                                                   "def fn(): 1/0\nfn()\n"))
+
+        if parallel:
+            self.addCleanup(multiprocessing_cleanup_tests)
         compileall.compile_dir(
                 self.directory, quiet=True, ddir=ddir,
                 workers=2 if parallel else 1)
+
         self.assertTrue(mods)
         for mod in mods:
             self.assertTrue(mod.startswith(self.directory), mod)