joblib中出现此类问题的原因是什么? '多处理支持的并行循环不能嵌套在线程下面,设置n_jobs = 1' 我该怎么做才能避免这样的问题?
实际上我需要实现在后台线程中运行繁重计算的XMLRPC服务器,并通过从UI客户端轮询来报告当前进度。它使用基于joblib的scikit-learn。
P.S .: 我只是简单地将线程的名称更改为“MainThread”以避免此类警告,并且一切看起来都很好(并行运行并没有问题)。这种解决方法将来可能会出现什么问题?
答案 0 :(得分:2)
这似乎是由JobLib库中的issue引起的。在撰写本文时,这似乎已经修复但尚未发布。如问题中所述,脏修复会将主线程重命名为MainThread
:
threading.current_thread().name = 'MainThread'
答案 1 :(得分:0)
当我使用加载的并且装有n_jobs> 1的模型对线程中的sklearn进行预测时,我也有同样的警告。当您腌制模型时,它会与参数一起保存,包括n_jobs。
>为避免警告(和潜在的序列化成本),在对模型进行酸洗时将n_jobs设置为1:
clf = joblib.load(模型文件名) .set_params(n_jobs = 1)