python - 自动/动态多处理 python
问题描述
我有一个随机森林,并使用 K-fold 验证我试图找到深度长度和其他一些参数的最佳值。我正在运行一个 QuadCore CPU,因此我试图弄清楚,我如何迭代说max_depth = range(50,101)
,这样当一个核心完成与它的森林匹配时,它max_depth
会自动获取max_depth
列表中的下一个。还是将其拆分max_depth
为 4 个相等的大小并手动进行 4 个进程是否更好?
解决方案
恕我直言,最好的解决方案是使用队列和手动创建流程。这样,您就可以完全控制流程。
max_depth
从输入队列中获取随机森林后,创建执行随机森林的函数。将结果推送到输出队列中。- 您将所有
max_depth
值放入输入队列 - 您创建了许多最适合您的架构的流程。通常,4 个内核的 8 个进程(使用超线程)是一个很好的起点
- 启动进程。
启动进程后,每个进程都会从输入队列中获取一个参数并执行您的 RandomForest。在一个进程完成后,它将结果放入另一个队列并从输入队列中检索另一个参数。使用队列,您不必关心哪个进程首先完成等,因为队列是线程安全的,因此只有一个进程可以访问它们。任何其他人将等待访问。您也不必担心max_depth
-list 的最佳拆分是什么。一旦一个过程完成,它就会自动获得一个新的计算值。如果队列中没有任何内容,它将停止。
我通常更喜欢这种类型的多处理,Pool
因为我有更多的控制权。这是一个小例子。
推荐阅读
- arrays - 如何使用字典调用函数?
- javascript - 覆盖 Nuxt 的目录
- c# - ASP.NET Core ResponseCacheAttribute - VaryByCustom?
- javascript - axios put 请求问题
- regex - 如何使用 Notepad++ 正则表达式查找句子
- c++ - 是否可以创建模板模板参数列表?
- c# - Fluent NHibernate & Migrator 问题与 CRUD 操作
- sql - SQL Server 2014 - 不推荐使用的数据类型问题 - 错误 596,无法继续执行,因为会话处于终止状态
- jquery - 当用户滚动到某个部分时突出显示导航项
- zapier - 将小时转换为 HH:MM 格式