forked from moreo/QuaPy
doing some benchmarking
This commit is contained in:
parent
9e6b9c8955
commit
9542eaee61
|
@ -56,6 +56,7 @@ def parallel(func, args, n_jobs, seed=None, asarray=True, backend='loky'):
|
||||||
:param seed: the numeric seed
|
:param seed: the numeric seed
|
||||||
:param asarray: set to True to return a np.ndarray instead of a list
|
:param asarray: set to True to return a np.ndarray instead of a list
|
||||||
:param backend: indicates the backend used for handling parallel works
|
:param backend: indicates the backend used for handling parallel works
|
||||||
|
:param open_args: if True, then the delayed function is called on *args_i, instead of on args_i
|
||||||
"""
|
"""
|
||||||
def func_dec(environ, seed, *args):
|
def func_dec(environ, seed, *args):
|
||||||
qp.environ = environ.copy()
|
qp.environ = environ.copy()
|
||||||
|
@ -74,6 +75,40 @@ def parallel(func, args, n_jobs, seed=None, asarray=True, backend='loky'):
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def parallel_unpack(func, args, n_jobs, seed=None, asarray=True, backend='loky'):
|
||||||
|
"""
|
||||||
|
A wrapper of multiprocessing:
|
||||||
|
|
||||||
|
>>> Parallel(n_jobs=n_jobs)(
|
||||||
|
>>> delayed(func)(*args_i) for args_i in args
|
||||||
|
>>> )
|
||||||
|
|
||||||
|
that takes the `quapy.environ` variable as input silently.
|
||||||
|
Seeds the child processes to ensure reproducibility when n_jobs>1.
|
||||||
|
|
||||||
|
:param func: callable
|
||||||
|
:param args: args of func
|
||||||
|
:param seed: the numeric seed
|
||||||
|
:param asarray: set to True to return a np.ndarray instead of a list
|
||||||
|
:param backend: indicates the backend used for handling parallel works
|
||||||
|
"""
|
||||||
|
|
||||||
|
def func_dec(environ, seed, *args):
|
||||||
|
qp.environ = environ.copy()
|
||||||
|
qp.environ['N_JOBS'] = 1
|
||||||
|
# set a context with a temporal seed to ensure results are reproducibles in parallel
|
||||||
|
with ExitStack() as stack:
|
||||||
|
if seed is not None:
|
||||||
|
stack.enter_context(qp.util.temp_seed(seed))
|
||||||
|
return func(*args)
|
||||||
|
|
||||||
|
out = Parallel(n_jobs=n_jobs, backend=backend)(
|
||||||
|
delayed(func_dec)(qp.environ, None if seed is None else seed + i, *args_i) for i, args_i in enumerate(args)
|
||||||
|
)
|
||||||
|
if asarray:
|
||||||
|
out = np.asarray(out)
|
||||||
|
return out
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def temp_seed(random_state):
|
def temp_seed(random_state):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue