]> granicus.if.org Git - python/commitdiff
bpo-37531: regrtest main process uses shorter timeout (GH-16220) (GH-16224)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 17 Sep 2019 12:34:13 +0000 (05:34 -0700)
committerVictor Stinner <vstinner@redhat.com>
Tue, 17 Sep 2019 12:34:13 +0000 (14:34 +0200)
When using multiprocesss (-jN), the main process now uses a timeout
of 60 seconds instead of the double of the --timeout value. The
buildbot server stops a job which does not produce any output in 1200
seconds.
(cherry picked from commit 46b0b81220a23bc4aee5ba3ba67e8cf1b5df7960)

Co-authored-by: Victor Stinner <vstinner@redhat.com>
Lib/test/libregrtest/runtest_mp.py

index c22479b7976f000012f812043de1be6403fdd279..482bb80726dc9ad1650b4dac95b6ee8e14af2c13 100644 (file)
@@ -20,6 +20,7 @@ from test.libregrtest.utils import format_duration
 
 # Display the running tests if nothing happened last N seconds
 PROGRESS_UPDATE = 30.0   # seconds
+assert PROGRESS_UPDATE >= PROGRESS_MIN_TIME
 
 # Time to wait until a worker completes: should be immediate
 JOIN_TIMEOUT = 30.0   # seconds
@@ -305,10 +306,8 @@ class MultiprocessRunner:
         self.pending = MultiprocessIterator(self.regrtest.tests)
         if self.ns.timeout is not None:
             self.worker_timeout = self.ns.timeout * 1.5
-            self.main_timeout = self.ns.timeout * 2.0
         else:
             self.worker_timeout = None
-            self.main_timeout = None
         self.workers = None
 
     def start_workers(self):
@@ -345,12 +344,13 @@ class MultiprocessRunner:
             except queue.Empty:
                 return None
 
+        use_faulthandler = (self.ns.timeout is not None)
+        timeout = PROGRESS_UPDATE
         while True:
-            if self.main_timeout is not None:
-                faulthandler.dump_traceback_later(self.main_timeout, exit=True)
+            if use_faulthandler:
+                faulthandler.dump_traceback_later(timeout * 2.0, exit=True)
 
             # wait for a thread
-            timeout = max(PROGRESS_UPDATE, PROGRESS_MIN_TIME)
             try:
                 return self.output.get(timeout=timeout)
             except queue.Empty:
@@ -415,7 +415,7 @@ class MultiprocessRunner:
             print()
             self.regrtest.interrupted = True
         finally:
-            if self.main_timeout is not None:
+            if self.ns.timeout is not None:
                 faulthandler.cancel_dump_traceback_later()
 
         # a test failed (and --failfast is set) or all tests completed