From 522b0edc8cd53d7eb726f28a9d35c2a29e062ac6 Mon Sep 17 00:00:00 2001 From: richardpaulhudson Date: Tue, 4 Oct 2022 12:12:09 +0200 Subject: [PATCH] Handle PermissionError in Windows CI --- spacy/tests/test_parallel.py | 101 ++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/spacy/tests/test_parallel.py b/spacy/tests/test_parallel.py index b361afd33..6f6c9f958 100644 --- a/spacy/tests/test_parallel.py +++ b/spacy/tests/test_parallel.py @@ -218,58 +218,61 @@ def test_project_run_multiprocessing_failure(failing_command: str): with a non-zero return code, the other two commands after several seconds with zero return codes. Measuring the execution length for the whole group shows whether or not the sleeping processes were successfully terminated.""" - with make_tempdir() as d: + try: + with make_tempdir() as d: - pscript = """ -import sys -from time import sleep + pscript = """ + import sys + from time import sleep -_, sleep_secs, rc = sys.argv -sleep(int(sleep_secs)) -sys.exit(int(rc)) - """ + _, sleep_secs, rc = sys.argv + sleep(int(sleep_secs)) + sys.exit(int(rc)) + """ - pscript_loc = os.sep.join((str(d), "pscript.py")) - with open(pscript_loc, "w") as pscript_file: - pscript_file.write(pscript) - os.chmod(pscript_loc, 0o777) - project = { - "commands": [ - { - "name": "commandA", - "script": [" ".join(("python", pscript_loc, "25", "0"))], + pscript_loc = os.sep.join((str(d), "pscript.py")) + with open(pscript_loc, "w") as pscript_file: + pscript_file.write(pscript) + os.chmod(pscript_loc, 0o777) + project = { + "commands": [ + { + "name": "commandA", + "script": [" ".join(("python", pscript_loc, "25", "0"))], + }, + { + "name": "commandB", + "script": [" ".join((failing_command, pscript_loc, "0", "1"))], + }, + { + "name": "commandC", + "script": [" ".join(("python", pscript_loc, "20", "0"))], + }, + ], + "workflows": { + "all": [ + {"parallel": ["commandA", "commandB", "commandC"]}, + "commandC", + ] }, - { - "name": "commandB", - "script": [" ".join((failing_command, pscript_loc, "0", "1"))], - }, - { - "name": "commandC", - "script": [" ".join(("python", pscript_loc, "20", "0"))], - }, - ], - "workflows": { - "all": [ - {"parallel": ["commandA", "commandB", "commandC"]}, - "commandC", - ] - }, - } - srsly.write_yaml(d / "project.yml", project) - load_project_config(d) - start = time() - with pytest.raises(SystemExit) as rc_e: - project_run(d, "all") - if os.name == "nt": - # because in Windows the terminated process has rc=15 rather than rc=-15, - # 15 is the highest rc rather than 1. - assert rc_e.value.code == 15 - else: - assert rc_e.value.code == 1 - time_taken = time() - start - print("time_taken:", time_taken) - assert ( - time_taken < 15 - ), "Test took {time_taken}, subprocess seems not to have been terminated" + } + srsly.write_yaml(d / "project.yml", project) + load_project_config(d) + start = time() + with pytest.raises(SystemExit) as rc_e: + project_run(d, "all") + if os.name == "nt": + # because in Windows the terminated process has rc=15 rather than rc=-15, + # 15 is the highest rc rather than 1. + assert rc_e.value.code == 15 + else: + assert rc_e.value.code == 1 + time_taken = time() - start + assert ( + time_taken < 15 + ), "Test took {time_taken}, subprocess seems not to have been terminated" + except PermissionError: # occurs on Windows in the CI because the terminated subprocess still has + # a handle on the temporary directory + pass