r - 使用 R 未来包的最大并行进程数
问题描述
library(future)
plan(multiprocess)
for (i in 1:20) {
background_process <- future({
Sys.sleep(1000)
})
}
# takes way too long to get here
我有一个 XEON 8 核 16 线程 CPU
我希望上面的代码在几秒钟内将控制权返回给父进程,我希望创建 20 个进程所需的时间。但花费的时间比预期的要长得多。所以我检查了我的机器在运行这段代码时运行的 R 进程的数量。事实证明,只有 16 个 R 进程在后台运行。
那么问题来了,为什么代码只能创建 16 个进程,从而在等待创建其他 4 个进程时阻塞父进程?
编辑:
啊,我明白了。运行plan(multiprocess)
仅创建 16 个进程。那我如何让它创造更多呢?
解决方案
如果您稍微详细阅读了 R 的未来:全面概述,那么这就是中间的:
“如果未指定其他内容,则将使用机器上所有可用的内核,参见
parallel::detectCores()
。有关更多详细信息,请参阅help("availableCores", package = "future")
。
因此,您的XEON 8 核、16 线程 CPU将从 16 个进程开始。
我相信你可以使用这样的东西来获得更多:
plan(multisession, workers = 17)
# I've seen this too, not sure when this is necessary
# plan(tweak(multisession, workers = 17))
推荐阅读
- windows - 尝试使用 KB 在 powershell 中安装更新
- javascript - 在 Vuex 中创建突变和动作?
- php - 无法通过浏览器连接到 MySQL 服务器
- html - 使用 tempdata 属性的 toastr 通知不起作用
- locking - 如何用 webpy 做 DB 或 table 锁
- angular - 从内容 Content-Disposition 下载带有名称的 Angular 文件
- python - 需要帮助使用 tkinter 与多个 MySql 表进行交互
- javascript - 我们什么时候应该/不应该使用 Ember 模型来显示数据?
- haskell - 无法将预期类型“a”与实际类型“[a]”匹配
- numpy - Pytorch TypeError - eq() 收到了无效的参数组合