此警告來自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]
注意,所有的過程都同時運行,這可能導致比順序實現最差表現。
這就是說,他們沒有太多的用例,使用嵌套並行是一個好主意。 所有核心應該用於更多時間消耗的任務,其他任務依次運行。