]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.11] gh-108388: Split test_multiprocessing_spawn (GH-108396) (#109688)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 21 Sep 2023 20:44:21 +0000 (13:44 -0700)
committerGitHub <noreply@github.com>
Thu, 21 Sep 2023 20:44:21 +0000 (20:44 +0000)
gh-108388: Split test_multiprocessing_spawn (GH-108396)

Split test_multiprocessing_fork, test_multiprocessing_forkserver and
test_multiprocessing_spawn into test packages. Each package is made
of 4 sub-tests: processes, threads, manager and misc. It allows
running more tests in parallel and so reduce the total test duration.
(cherry picked from commit aa9a359ca2663195b0f04eef46109c28c4ff74d3)

Co-authored-by: Victor Stinner <vstinner@python.org>
19 files changed:
Lib/test/_test_multiprocessing.py
Lib/test/libregrtest/runtest.py
Lib/test/test_multiprocessing_fork/__init__.py [moved from Lib/test/test_multiprocessing_fork.py with 66% similarity]
Lib/test/test_multiprocessing_fork/test_manager.py [new file with mode: 0644]
Lib/test/test_multiprocessing_fork/test_misc.py [new file with mode: 0644]
Lib/test/test_multiprocessing_fork/test_processes.py [new file with mode: 0644]
Lib/test/test_multiprocessing_fork/test_threads.py [new file with mode: 0644]
Lib/test/test_multiprocessing_forkserver/__init__.py [moved from Lib/test/test_multiprocessing_forkserver.py with 58% similarity]
Lib/test/test_multiprocessing_forkserver/test_manager.py [new file with mode: 0644]
Lib/test/test_multiprocessing_forkserver/test_misc.py [new file with mode: 0644]
Lib/test/test_multiprocessing_forkserver/test_processes.py [new file with mode: 0644]
Lib/test/test_multiprocessing_forkserver/test_threads.py [new file with mode: 0644]
Lib/test/test_multiprocessing_spawn.py [deleted file]
Lib/test/test_multiprocessing_spawn/__init__.py [new file with mode: 0644]
Lib/test/test_multiprocessing_spawn/test_manager.py [new file with mode: 0644]
Lib/test/test_multiprocessing_spawn/test_misc.py [new file with mode: 0644]
Lib/test/test_multiprocessing_spawn/test_processes.py [new file with mode: 0644]
Lib/test/test_multiprocessing_spawn/test_threads.py [new file with mode: 0644]
Misc/NEWS.d/next/Tests/2023-08-24-04-23-35.gh-issue-108388.mr0MeE.rst [new file with mode: 0644]

index 54719f2586bb4051ddc4f11369624d3adeb65679..ac0ed397684f421f6aa849cad727145fb368e7e7 100644 (file)
@@ -6080,7 +6080,8 @@ class ThreadsMixin(BaseMixin):
 # Functions used to create test cases from the base ones in this module
 #
 
-def install_tests_in_module_dict(remote_globs, start_method):
+def install_tests_in_module_dict(remote_globs, start_method,
+                                 only_type=None, exclude_types=False):
     __module__ = remote_globs['__name__']
     local_globs = globals()
     ALL_TYPES = {'processes', 'threads', 'manager'}
@@ -6093,6 +6094,10 @@ def install_tests_in_module_dict(remote_globs, start_method):
                 continue
             assert set(base.ALLOWED_TYPES) <= ALL_TYPES, base.ALLOWED_TYPES
             for type_ in base.ALLOWED_TYPES:
+                if only_type and type_ != only_type:
+                    continue
+                if exclude_types:
+                    continue
                 newname = 'With' + type_.capitalize() + name[1:]
                 Mixin = local_globs[type_.capitalize() + 'Mixin']
                 class Temp(base, Mixin, unittest.TestCase):
@@ -6103,6 +6108,9 @@ def install_tests_in_module_dict(remote_globs, start_method):
                 Temp.__module__ = __module__
                 remote_globs[newname] = Temp
         elif issubclass(base, unittest.TestCase):
+            if only_type:
+                continue
+
             class Temp(base, object):
                 pass
             Temp.__name__ = Temp.__qualname__ = name
index c85d73170ba5592fda3a63b94d4c0b20a8c7f372..74e28e27e1abac3b5fbecb9088d4ffcd29ace9b6 100644 (file)
@@ -142,6 +142,9 @@ PROGRESS_MIN_TIME = 30.0   # seconds
 SPLITTESTDIRS = {
     "test_asyncio",
     "test_future_stmt",
+    "test_multiprocessing_fork",
+    "test_multiprocessing_forkserver",
+    "test_multiprocessing_spawn",
 }
 
 # Storage of uncollectable objects
similarity index 66%
rename from Lib/test/test_multiprocessing_fork.py
rename to Lib/test/test_multiprocessing_fork/__init__.py
index 5000edb7c5c299b6e77e3ca03e11961bf18d3332..aa1fff50b28f5f79ca57c973c044e1179ee8c925 100644 (file)
@@ -1,7 +1,6 @@
-import unittest
-import test._test_multiprocessing
-
+import os.path
 import sys
+import unittest
 from test import support
 
 if support.PGO:
@@ -13,7 +12,5 @@ if sys.platform == "win32":
 if sys.platform == 'darwin':
     raise unittest.SkipTest("test may crash on macOS (bpo-33725)")
 
-test._test_multiprocessing.install_tests_in_module_dict(globals(), 'fork')
-
-if __name__ == '__main__':
-    unittest.main()
+def load_tests(*args):
+    return support.load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_multiprocessing_fork/test_manager.py b/Lib/test/test_multiprocessing_fork/test_manager.py
new file mode 100644 (file)
index 0000000..9efbb83
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'fork', only_type="manager")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_fork/test_misc.py b/Lib/test/test_multiprocessing_fork/test_misc.py
new file mode 100644 (file)
index 0000000..891a494
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'fork', exclude_types=True)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_fork/test_processes.py b/Lib/test/test_multiprocessing_fork/test_processes.py
new file mode 100644 (file)
index 0000000..e64e9af
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'fork', only_type="processes")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_fork/test_threads.py b/Lib/test/test_multiprocessing_fork/test_threads.py
new file mode 100644 (file)
index 0000000..1670e34
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'fork', only_type="threads")
+
+if __name__ == '__main__':
+    unittest.main()
similarity index 58%
rename from Lib/test/test_multiprocessing_forkserver.py
rename to Lib/test/test_multiprocessing_forkserver/__init__.py
index 6ad5faf9e8a3290513965bf1e853176853bea0cf..d91715a344dfa7f7a6253966f48ac2b60c0ab7ec 100644 (file)
@@ -1,7 +1,6 @@
-import unittest
-import test._test_multiprocessing
-
+import os.path
 import sys
+import unittest
 from test import support
 
 if support.PGO:
@@ -10,7 +9,5 @@ if support.PGO:
 if sys.platform == "win32":
     raise unittest.SkipTest("forkserver is not available on Windows")
 
-test._test_multiprocessing.install_tests_in_module_dict(globals(), 'forkserver')
-
-if __name__ == '__main__':
-    unittest.main()
+def load_tests(*args):
+    return support.load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_multiprocessing_forkserver/test_manager.py b/Lib/test/test_multiprocessing_forkserver/test_manager.py
new file mode 100644 (file)
index 0000000..14f8f10
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'forkserver', only_type="manager")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_forkserver/test_misc.py b/Lib/test/test_multiprocessing_forkserver/test_misc.py
new file mode 100644 (file)
index 0000000..9cae1b5
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'forkserver', exclude_types=True)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_forkserver/test_processes.py b/Lib/test/test_multiprocessing_forkserver/test_processes.py
new file mode 100644 (file)
index 0000000..360967c
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'forkserver', only_type="processes")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_forkserver/test_threads.py b/Lib/test/test_multiprocessing_forkserver/test_threads.py
new file mode 100644 (file)
index 0000000..719c752
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'forkserver', only_type="threads")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_spawn.py b/Lib/test/test_multiprocessing_spawn.py
deleted file mode 100644 (file)
index 6558952..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-import unittest
-import test._test_multiprocessing
-
-from test import support
-
-if support.PGO:
-    raise unittest.SkipTest("test is not helpful for PGO")
-
-test._test_multiprocessing.install_tests_in_module_dict(globals(), 'spawn')
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/Lib/test/test_multiprocessing_spawn/__init__.py b/Lib/test/test_multiprocessing_spawn/__init__.py
new file mode 100644 (file)
index 0000000..3fd0f9b
--- /dev/null
@@ -0,0 +1,9 @@
+import os.path
+import unittest
+from test import support
+
+if support.PGO:
+    raise unittest.SkipTest("test is not helpful for PGO")
+
+def load_tests(*args):
+    return support.load_package_tests(os.path.dirname(__file__), *args)
diff --git a/Lib/test/test_multiprocessing_spawn/test_manager.py b/Lib/test/test_multiprocessing_spawn/test_manager.py
new file mode 100644 (file)
index 0000000..b40bea0
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'spawn', only_type="manager")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_spawn/test_misc.py b/Lib/test/test_multiprocessing_spawn/test_misc.py
new file mode 100644 (file)
index 0000000..32f37c5
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'spawn', exclude_types=True)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_spawn/test_processes.py b/Lib/test/test_multiprocessing_spawn/test_processes.py
new file mode 100644 (file)
index 0000000..af764b0
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'spawn', only_type="processes")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Lib/test/test_multiprocessing_spawn/test_threads.py b/Lib/test/test_multiprocessing_spawn/test_threads.py
new file mode 100644 (file)
index 0000000..c125774
--- /dev/null
@@ -0,0 +1,7 @@
+import unittest
+from test._test_multiprocessing import install_tests_in_module_dict
+
+install_tests_in_module_dict(globals(), 'spawn', only_type="threads")
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/Misc/NEWS.d/next/Tests/2023-08-24-04-23-35.gh-issue-108388.mr0MeE.rst b/Misc/NEWS.d/next/Tests/2023-08-24-04-23-35.gh-issue-108388.mr0MeE.rst
new file mode 100644 (file)
index 0000000..8cf77b1
--- /dev/null
@@ -0,0 +1,4 @@
+Split test_multiprocessing_fork, test_multiprocessing_forkserver and
+test_multiprocessing_spawn into test packages. Each package is made of 4
+sub-tests: processes, threads, manager and misc. It allows running more tests
+in parallel and so reduce the total test duration. Patch by Victor Stinner.