此警告来自joblib
,sklearn
中使用的多处理库。 它的并行机制依赖于multiprocessing.Pool
,它使用daemonic
工作人员无法产生子进程。
我没有看到任何简单的方法通过与sklearn
通过此限制。 您可能想要手动创建和管理您的过程。 如果您知道自己在做什么,则可以创建Process
并使用它们以n_jobs > 1
运行sklearn
函数。
这意味着很多照顾管理过程,而不是一次全部运行。 不要让它们变成daemonic
也很重要。 例如:
def target(j):
from time import sleep
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_jobs=2)
rf.fit(np.random.random(size=(100, 100)), np.random.random(100)> .6)
print(j, 'done')
pr = [mp.Process(target=target, args=(i,)) for i in range(10)];\
[p.start() for p in pr]
[p.join() for p in pr]
注意,所有的过程都同时运行,这可能导致比顺序实现最差表现。
这就是说,他们没有太多的用例,使用嵌套并行是一个好主意。 所有核心应该用于更多时间消耗的任务,其他任务依次运行。