如果我在foreach... %dopar%
没有注册集群的情况下运行,foreach 会引发警告,并按顺序执行代码:
library("doParallel")
foreach(i=1:3) %dopar%
sqrt(i)
产量:
Warning message:
executing %dopar% sequentially: no parallel backend registered
但是,如果我在启动、注册和停止集群后运行相同的代码,它会失败:
cl <- makeCluster(2)
registerDoParallel(cl)
stopCluster(cl)
rm(cl)
foreach(i=1:3) %dopar%
sqrt(i)
产量:
Error in summary.connection(connection) : invalid connection
是否有与之相反的registerDoParallel()
清理集群注册?或者在我重新开始我的 R 会话之前,我是否被旧集群的幽灵所困扰?
/edit:一些谷歌搜索揭示了bumphunter Biocondoctor包bumphunter:::foreachCleanup()
中的功能:
function ()
{
if (exists(".revoDoParCluster", where = doParallel:::.options)) {
if (!is.null(doParallel:::.options$.revoDoParCluster))
stopCluster(doParallel:::.options$.revoDoParCluster)
remove(".revoDoParCluster", envir = doParallel:::.options)
}
}
<environment: namespace:bumphunter>
但是,此功能似乎无法解决问题。
library(bumphunter)
cl <- makeCluster(2)
registerDoParallel(cl)
stopCluster(cl)
rm(cl)
bumphunter:::foreachCleanup()
foreach(i=1:3) %dopar%
sqrt(i)
foreach 将注册集群的信息保存在哪里?