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中的新功能。