使用Python和实例方法进行多处理

时间:2015-07-27 15:27:40

标签: python multiprocessing scikit-learn

我正在使用scikit-learn来训练KernelDensity一些“高级”参数。在初始拟合后评估score_samples时,处理需要很长时间,并且有多个核可用,我希望能够提高速度。 score_samples(采用任何长度的样本向量)应该很容易并行化。

到目前为止,我尝试multiprocessing让事情顺利进行。如果我运行我的脚本(我正在使用Pool.map()),我会收到一个实例方法不可拾取的错误。

这很明显,但是使用sklearn并严重依赖实例方法,我无法改变这种行为。

有没有办法让任何类型的多处理与sklearn(和实例方法)一起使用?我不介意python是否复制属于主进程的整个内存(这是可管理的),或者我是否需要从主程序提交每个块到score_samples(不优雅,但会完成工作)。 / p>

我应该看看哪些建议?

1 个答案:

答案 0 :(得分:0)

我只是猜测你需要存储特定于线程的状态,这就是你想要创建一个处理池的原因。我不确定这是否适用于scikit,但我使用的是threading.local()。听起来你对Python非常熟悉,但如果有帮助的话,这里有一个链接https://docs.python.org/3/library/threading.html#thread-local-data

我看了sci-kit和那里的文档。你尝试过使用joblib / joblib.parallel吗?