自动/动态多处理python

时间:2018-10-28 20:04:09

标签: python parallel-processing multiprocessing

我有一个随机森林,并使用K折验证来尝试找到深度长度和其他一些参数的最佳值。 我正在运行QuadCore CPU,因此我试图弄清楚如何迭代max_depth = range(50,101),这样,当其中一个内核完成其max_depth的森林安装时,它会自动获取下一个列表中的max_depth。 还是最好将max_depth分成4个相等的大小,然后手动进行4个处理?

1 个答案:

答案 0 :(得分:0)

恕我直言,最好的解决方案是使用队列和手动创建流程。这样,您就可以完全控制流程。

  1. 创建从输入队列获取max_depth后执行随机森林的函数。将结果推送到输出队列中。
  2. 您将所有max_depth值都放入了输入队列
  3. 您创建了许多最适合您的体系结构的流程。通常,用于4个内核的8个进程(具有超线程)是一个很好的起点
  4. 开始流程。

启动进程后,每个进程将从输入队列中获取一个参数,然后执行RandomForest。一个过程完成后,它将结果放入另一个队列,并从输入队列中检索另一个参数。使用队列,您不必担心哪个进程首先完成等,因为队列是线程安全的,因此只有一个进程可以访问它们。其他任何人都将等待访问。您也不必担心max_depth列表的最佳划分是什么。一旦一个过程完成,它将自动获得新的计算值。如果队列中没有任何内容,它将停止。

我通常比Pool更喜欢这种类型的多处理,因为我有更多的控制权。 Here是一个小例子。