diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2025-07-28 23:21:17 +0200 |
|---|---|---|
| committer | nessita <124304+nessita@users.noreply.github.com> | 2025-07-29 14:11:22 -0300 |
| commit | d55979334dcefdb11626220000bec97ade09df07 (patch) | |
| tree | 7b97116fe080afb6f26b4f2381303868f7f02f5e /django/test | |
| parent | d4dd3e503c88db92f254769a64b2fcd4c572c7dc (diff) | |
Fixed #36531 -- Added forkserver support to parallel test runner.
Diffstat (limited to 'django/test')
| -rw-r--r-- | django/test/runner.py | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/django/test/runner.py b/django/test/runner.py index 3e5c319ade..1bfeca03af 100644 --- a/django/test/runner.py +++ b/django/test/runner.py @@ -404,8 +404,9 @@ def get_max_test_processes(): The maximum number of test processes when using the --parallel option. """ # The current implementation of the parallel test runner requires - # multiprocessing to start subprocesses with fork() or spawn(). - if multiprocessing.get_start_method() not in {"fork", "spawn"}: + # multiprocessing to start subprocesses with fork(), forkserver(), or + # spawn(). + if multiprocessing.get_start_method() not in {"fork", "spawn", "forkserver"}: return 1 try: return int(os.environ["DJANGO_TEST_PROCESSES"]) @@ -450,9 +451,12 @@ def _init_worker( counter.value += 1 _worker_id = counter.value - start_method = multiprocessing.get_start_method() + is_spawn_or_forkserver = multiprocessing.get_start_method() in { + "forkserver", + "spawn", + } - if start_method == "spawn": + if is_spawn_or_forkserver: if process_setup and callable(process_setup): if process_setup_args is None: process_setup_args = () @@ -463,7 +467,7 @@ def _init_worker( db_aliases = used_aliases if used_aliases is not None else connections for alias in db_aliases: connection = connections[alias] - if start_method == "spawn": + if is_spawn_or_forkserver: # Restore initial settings in spawned processes. connection.settings_dict.update(initial_settings[alias]) if value := serialized_contents.get(alias): @@ -606,7 +610,7 @@ class ParallelTestSuite(unittest.TestSuite): return iter(self.subsuites) def initialize_suite(self): - if multiprocessing.get_start_method() == "spawn": + if multiprocessing.get_start_method() in {"forkserver", "spawn"}: self.initial_settings = { alias: connections[alias].settings_dict for alias in connections } |
