首页 > 解决方案 > 使用 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 个进程。那我如何让它创造更多呢?

标签: rparallel-processing

解决方案


如果您稍微详细阅读了 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)) 

推荐阅读