Skip to content

Commit

Permalink
Test child raises parent exits cleanly more reliable on macos (#1335)
Browse files Browse the repository at this point in the history
  • Loading branch information
ogrisel committed Sep 15, 2022
1 parent ac09691 commit a23427d
Showing 1 changed file with 14 additions and 37 deletions.
51 changes: 14 additions & 37 deletions joblib/test/test_memmapping.py
Expand Up @@ -586,39 +586,6 @@ def parallel_raise(array, temp_dirs):
assert b"resource_tracker" not in err, err.decode()


@with_numpy
@with_multiprocessing
def test_nested_loop_error_in_grandchild_resource_tracker_silent():
# Safety smoke test: test that nested parallel calls using the loky backend
# don't yield noisy resource_tracker outputs when the grandchild errors
# out.
cmd = '''if 1:
from joblib import Parallel, delayed
def raise_error(i):
raise ValueError
def nested_loop(f):
Parallel(backend="loky", n_jobs=2)(
delayed(f)(i) for i in range(10)
)
if __name__ == "__main__":
Parallel(backend="loky", n_jobs=2)(
delayed(nested_loop)(func) for func in [raise_error]
)
'''
p = subprocess.Popen([sys.executable, '-c', cmd],
stderr=subprocess.PIPE, stdout=subprocess.PIPE)
p.wait()
out, err = p.communicate()
assert p.returncode == 1, out.decode()
assert b"resource_tracker" not in err, err.decode()


@with_numpy
@with_multiprocessing
@parametrize("backend", ["multiprocessing", "loky"])
Expand Down Expand Up @@ -813,6 +780,7 @@ def test_child_raises_parent_exits_cleanly(backend):
# - the resource_tracker does not emit any warnings.
cmd = """if 1:
import os
from pathlib import Path
from time import sleep
import numpy as np
Expand All @@ -824,9 +792,9 @@ def test_child_raises_parent_exits_cleanly(backend):
def get_temp_folder(parallel_obj, backend):
if "{b}" == "loky":
return p._backend._workers._temp_folder
return Path(p._backend._workers._temp_folder)
else:
return p._backend._pool._temp_folder
return Path(p._backend._pool._temp_folder)
if __name__ == "__main__":
Expand All @@ -839,13 +807,22 @@ def get_temp_folder(parallel_obj, backend):
# the temporary folder should be deleted by the end of this
# call but apparently on some file systems, this takes
# some time to be visible.
#
# We attempt to write into the temporary folder to test for
# its existence and we wait for a maximum of 10 seconds.
for i in range(100):
if not os.path.exists(temp_folder):
try:
with open(temp_folder / "some_file.txt", "w") as f:
f.write("some content")
except FileNotFoundError:
# temp_folder has been deleted, all is fine
break
# ... else, wait a bit and try again
sleep(.1)
else:
raise AssertionError(
temp_folder + " was not deleted"
str(temp_folder) + " was not deleted"
) from e
""".format(b=backend)
env = os.environ.copy()
Expand Down

0 comments on commit a23427d

Please sign in to comment.