To fix the random failed test cases of test___xxsubinterpreters in multiprocess. (GH-27240) (GH-27453)

(cherry picked from commit 9101b39e67)

Co-authored-by: Hai Shi <shihai1992@gmail.com>
This commit is contained in:
Miss Islington (bot) 2021-07-29 10:28:22 -07:00 committed by GitHub
parent 6d4af4dfd6
commit e627c79478
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -38,6 +38,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()
@ -50,6 +64,7 @@ def _running(interp):
t = threading.Thread(target=run)
t.start()
_wait_for_interp_to_run(interp)
yield