sklearn.utils.parallel_backend¶
sklearn.utils.parallel_backend(backend, n_jobs=-1, inner_max_num_threads=None, **backend_params)
在with块中更改Parallel使用的默认后端。
如果backend是字符串,则必须使用register_parallel_backend函数匹配先前注册的实现。
默认情况下,以下后端可用:
“ loky”:基于进程的单主机并行性(默认使用),
“线程”:单主机,基于线程的并行性,
“多处理”:传统的基于进程的单主机并行处理。
建议使用“ loky”来运行用于处理Python对象的函数。 “线程化”是一种开销较低的替代方案,对于释放“全局解释器锁定”的功能最有效: 在对明确释放GIL的本机代码的几次调用中,I / O绑定代码或CPU绑定代码。
另外,如果安装了dask和分布式Python软件包,则可以使用“ dask”后端更好地调度嵌套,并行调用而不会超额预订,并且有可能在多个主机的网络群集上分配并行调用。
另外,后端可以直接作为实例传递。
默认情况下,将使用所有可用的工作程序(n_jobs = -1),除非调用者为n_jobs参数传递一个显式值。
这是将backend ='backend_name'参数传递给Parallel类构造函数的替代方法。 当调用内部使用joblib但未在其自己的API中公开后端参数的库代码时,此功能特别有用。
>>> from operator import neg
>>> with parallel_backend('threading'):
... print(Parallel()(delayed(neg)(i + 1) for i in range(5)))
...
[-1, -2, -3, -4, -5]
警告:此功能是实验性的,在Joblib的将来版本中可能会更改。
Joblib还尝试通过限制某些第三方库线程池(例如OpenBLAS,MKL或OpenMP)中可用的线程数来限制超额订阅。 每个工作程序中的默认限制设置为max(cpu_count()// Effective_n_jobs,1),但是可以使用inner_max_num_threads参数覆盖此限制,该参数将用于在子进程中设置此限制。
版本0.10中的新功能。