Если я запускаю 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:::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 хранит информацию о зарегистрированном кластере?
foreach
все равно ищется остановленный кластер. - person Zach   schedule 02.08.2014foreach
после остановки кластера, или вопреки вашему желанию кластер останавливается преждевременно до завершенияforeach
, или что-то еще? Перечитывая, вы хотите, чтобы он запускался, но с предупреждением, в случае остановки кластера? - person Patrick McCarthy   schedule 03.08.2014