diff options
author | Hai Shi <shihai1992@gmail.com> | 2021-07-29 17:05:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-29 17:05:49 (GMT) |
commit | 9101b39e67c2437e88c0ad6b57aafd48ab08d431 (patch) | |
tree | 2e6ffff984212312020835c222f2427b6e7a2322 /Lib/test/test__xxsubinterpreters.py | |
parent | ccefa8a905c797e4a60078d5e1de846f929c6928 (diff) | |
download | cpython-9101b39e67c2437e88c0ad6b57aafd48ab08d431.zip cpython-9101b39e67c2437e88c0ad6b57aafd48ab08d431.tar.gz cpython-9101b39e67c2437e88c0ad6b57aafd48ab08d431.tar.bz2 |
To fix the random failed test cases of test___xxsubinterpreters in multiprocess. (GH-27240)
Diffstat (limited to 'Lib/test/test__xxsubinterpreters.py')
-rw-r--r-- | Lib/test/test__xxsubinterpreters.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Lib/test/test__xxsubinterpreters.py b/Lib/test/test__xxsubinterpreters.py index 7baea69..81bce2e 100644 --- a/Lib/test/test__xxsubinterpreters.py +++ b/Lib/test/test__xxsubinterpreters.py @@ -39,6 +39,20 @@ def _run_output(interp, request, shared=None): return rpipe.read() +def _wait_for_interp_to_run(interp, timeout=None): + # bpo-37224: Running this test file in multiprocesses will fail randomly. + # The failure reason is that the thread can't acquire the cpu to + # run subinterpreter eariler than the main thread in multiprocess. + if timeout is None: + timeout = support.SHORT_TIMEOUT + start_time = time.monotonic() + deadline = start_time + timeout + while not interpreters.is_running(interp): + if time.monotonic() > deadline: + raise RuntimeError('interp is not running') + time.sleep(0.010) + + @contextlib.contextmanager def _running(interp): r, w = os.pipe() @@ -51,6 +65,7 @@ def _running(interp): t = threading.Thread(target=run) t.start() + _wait_for_interp_to_run(interp) yield |