クラスターを登録せずに実行する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 セッションを再起動するまで、古いクラスターのゴーストが残るのでしょうか?
/編集: いくつかのグーグルは、 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 は、登録されたクラスターに関する情報をどこに保持しますか?