17

joblib 中出现此类问题的原因是什么?'多处理支持的并行循环不能嵌套在线程下,设置 n_jobs=1' 我应该怎么做才能避免这样的问题?

实际上,我需要实现在后台线程中运行大量计算并通过 UI 客户端轮询报告当前进度的 XMLRPC 服务器。它使用基于 joblib 的 scikit-learn。

PS:我只是将线程的名称更改为“MainThread”以避免此类警告,并且一切看起来都运行良好(按预期并行运行而没有问题)。这种解决方法将来可能会出现什么问题?

4

2 回答 2

7

我在线程中使用 sklearn 进行预测时遇到了同样的警告,使用的是我加载的模型,该模型配备了 n_jobs > 1。当您腌制模型时,它会显示它的参数,包括 n_jobs。

为避免警告(和潜在的序列化成本),请在酸洗模型时将 n_jobs 设置为 1:

clf = joblib.load(model_filename).set_params(n_jobs=1)
于 2018-11-23T19:25:24.940 回答
1

这似乎是由于 JobLib 库中的这个问题。在撰写本文时,这似乎已修复但尚未发布。正如问题中所写,一个肮脏的修复会将主线程重命名为MainThread

threading.current_thread().name = 'MainThread'

于 2017-01-13T08:00:28.077 回答