[Python-checkins] regrtest: log timeout at startup (GH-19514)

Victor Stinner webhook-mailer at python.org
Tue Apr 14 12:30:02 EDT 2020


https://github.com/python/cpython/commit/4cf65a630a8d45bad3fe5cdc4c2632ec64e7ba27
commit: 4cf65a630a8d45bad3fe5cdc4c2632ec64e7ba27
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-04-14T18:29:44+02:00
summary:

regrtest: log timeout at startup (GH-19514)

Reduce also worker timeout.

files:
M Lib/test/libregrtest/main.py
M Lib/test/libregrtest/runtest_mp.py

diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 1de51b740a98c..95b4856c8bed7 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -394,7 +394,10 @@ def run_tests_sequential(self):
 
         save_modules = sys.modules.keys()
 
-        self.log("Run tests sequentially")
+        msg = "Run tests sequentially"
+        if self.ns.timeout:
+            msg += " (timeout: %s)" % format_duration(self.ns.timeout)
+        self.log(msg)
 
         previous_test = None
         for test_index, test_name in enumerate(self.tests, 1):
diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py
index fc12ea7c5fc14..7a18e45434bb4 100644
--- a/Lib/test/libregrtest/runtest_mp.py
+++ b/Lib/test/libregrtest/runtest_mp.py
@@ -352,7 +352,11 @@ def __init__(self, regrtest):
         self.output = queue.Queue()
         self.pending = MultiprocessIterator(self.regrtest.tests)
         if self.ns.timeout is not None:
-            self.worker_timeout = self.ns.timeout * 1.5
+            # Rely on faulthandler to kill a worker process. This timouet is
+            # when faulthandler fails to kill a worker process. Give a maximum
+            # of 5 minutes to faulthandler to kill the worker.
+            self.worker_timeout = min(self.ns.timeout * 1.5,
+                                      self.ns.timeout + 5 * 60)
         else:
             self.worker_timeout = None
         self.workers = None
@@ -360,8 +364,12 @@ def __init__(self, regrtest):
     def start_workers(self):
         self.workers = [TestWorkerProcess(index, self)
                         for index in range(1, self.ns.use_mp + 1)]
-        self.log("Run tests in parallel using %s child processes"
-                 % len(self.workers))
+        msg = f"Run tests in parallel using {len(self.workers)} child processes"
+        if self.ns.timeout:
+            msg += (" (timeout: %s, worker timeout: %s)"
+                    % (format_duration(self.ns.timeout),
+                       format_duration(self.worker_timeout)))
+        self.log(msg)
         for worker in self.workers:
             worker.start()
 



More information about the Python-checkins mailing list