Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6d7f4f6

Browse files
committed
regrtest: add timeout to main process when using -jN
libregrtest: add a watchdog to run_tests_multiprocess() using faulthandler.dump_traceback_later().
1 parent e98445a commit 6d7f4f6

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

Lib/test/libregrtest/runtest_mp.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import faulthandler
12
import json
23
import os
34
import queue
@@ -151,6 +152,8 @@ def run(self):
151152
def run_tests_multiprocess(regrtest):
152153
output = queue.Queue()
153154
pending = MultiprocessIterator(regrtest.tests)
155+
test_timeout = regrtest.ns.timeout
156+
use_timeout = (test_timeout is not None)
154157

155158
workers = [MultiprocessThread(pending, output, regrtest.ns)
156159
for i in range(regrtest.ns.use_mp)]
@@ -170,11 +173,14 @@ def get_running(workers):
170173

171174
finished = 0
172175
test_index = 1
173-
timeout = max(PROGRESS_UPDATE, PROGRESS_MIN_TIME)
176+
get_timeout = max(PROGRESS_UPDATE, PROGRESS_MIN_TIME)
174177
try:
175178
while finished < regrtest.ns.use_mp:
179+
if use_timeout:
180+
faulthandler.dump_traceback_later(test_timeout, exit=True)
181+
176182
try:
177-
item = output.get(timeout=timeout)
183+
item = output.get(timeout=get_timeout)
178184
except queue.Empty:
179185
running = get_running(workers)
180186
if running and not regrtest.ns.pgo:
@@ -215,6 +221,9 @@ def get_running(workers):
215221
regrtest.interrupted = True
216222
pending.interrupted = True
217223
print()
224+
finally:
225+
if use_timeout:
226+
faulthandler.cancel_dump_traceback_later()
218227

219228
running = [worker.current_test for worker in workers]
220229
running = list(filter(bool, running))

0 commit comments

Comments
 (0)