Если я запустил 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: некоторый googling показывает функцию bumphunter:::foreachCleanup()
в пакете bumphunter Biocondoctor:
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 хранит информацию о зарегистрированном кластере?