◐ Shell
clean mode source ↗

[3.12] gh-119727: Add --single-process option to regrtest (GH-119728) by hugovk · Pull Request #130359 · python/cpython

Expand Up @@ -87,12 +87,13 @@ def __init__(self, ns: Namespace, _add_python_opts: bool = False): self.cmdline_args: TestList = ns.args
# Workers if ns.use_mp is None: num_workers = 0 # run sequentially self.single_process: bool = ns.single_process if self.single_process or ns.use_mp is None: num_workers = 0 # run sequentially in a single process elif ns.use_mp <= 0: num_workers = -1 # use the number of CPUs num_workers = -1 # run in parallel, use the number of CPUs else: num_workers = ns.use_mp num_workers = ns.use_mp # run in parallel self.num_workers: int = num_workers self.worker_json: StrJSON | None = ns.worker_json
Expand Down Expand Up @@ -234,7 +235,7 @@ def list_tests(tests: TestTuple):
def _rerun_failed_tests(self, runtests: RunTests): # Configure the runner to re-run tests if self.num_workers == 0: if self.num_workers == 0 and not self.single_process: # Always run tests in fresh processes to have more deterministic # initial state. Don't re-run tests in parallel but limit to a # single worker process to have side effects (on the system load Expand All @@ -244,7 +245,6 @@ def _rerun_failed_tests(self, runtests: RunTests): tests, match_tests_dict = self.results.prepare_rerun()
# Re-run failed tests self.log(f"Re-running {len(tests)} failed tests in verbose mode in subprocesses") runtests = runtests.copy( tests=tests, rerun=True, Expand All @@ -254,7 +254,15 @@ def _rerun_failed_tests(self, runtests: RunTests): match_tests_dict=match_tests_dict, output_on_failure=False) self.logger.set_tests(runtests) self._run_tests_mp(runtests, self.num_workers)
msg = f"Re-running {len(tests)} failed tests in verbose mode" if not self.single_process: msg = f"{msg} in subprocesses" self.log(msg) self._run_tests_mp(runtests, self.num_workers) else: self.log(msg) self.run_tests_sequentially(runtests) return runtests
def rerun_failed_tests(self, runtests: RunTests): Expand Down Expand Up @@ -367,7 +375,7 @@ def run_tests_sequentially(self, runtests): tests = count(jobs, 'test') else: tests = 'tests' msg = f"Run {tests} sequentially" msg = f"Run {tests} sequentially in a single process" if runtests.timeout: msg += " (timeout: %s)" % format_duration(runtests.timeout) self.log(msg) Expand Down Expand Up @@ -589,7 +597,7 @@ def _add_cross_compile_opts(self, regrtest_opts): keep_environ = True
if cross_compile and hostrunner: if self.num_workers == 0: if self.num_workers == 0 and not self.single_process: # For now use only two cores for cross-compiled builds; # hostrunner can be expensive. regrtest_opts.extend(['-j', '2']) Expand Down