首页 > 解决方案 > 自动/动态多处理 python

问题描述

我有一个随机森林,并使用 K-fold 验证我试图找到深度长度和其他一些参数的最佳值。我正在运行一个 QuadCore CPU,因此我试图弄清楚,我如何迭代说max_depth = range(50,101),这样当一个核心完成与它的森林匹配时,它max_depth会自动获取max_depth列表中的下一个。还是将其拆分max_depth为 4 个相等的大小并手动进行 4 个进程是否更好?

标签: pythonparallel-processingmultiprocessing

解决方案


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

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

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

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


推荐阅读