引数をクラスター オブジェクトではなく整数に設定してpblapply
関数を使用しています。cl
これにより、代わりに がpblapply
呼び出されます。この方法で正しいオブジェクトを関数に入力することを心配する必要はありません。これにより、全体的なワークフローが改善されることがわかりました。ただし、RStudio 内で呼び出しを手動で中断する必要がある場合(ストップ サインをクリックする)、セッションがハングし、端末を介して手動で強制終了する必要があるランナウェイ コアが大量に発生します。mclapply
parLapply
clusterExport
pblapply
この問題は RStudio に固有のものです。を使用して端末から同じコードを実行しRscript
、手動で介して中断するCTRL-C
と、クラスターが正常に停止します。RStudio に限定されている場合に、この問題を処理するためのより適切で効率的な方法はありますか?
を使用する場合の私のソリューションの例を次に示しparLapply
ます。mclapply
これは代わりに動作するように翻訳できますか?
tryCatch({
cl <- makeCluster(detectCores()-1, "SOCK")
clusterEvalQ(cl, {
library(...) # load necessary libraries to each socket
}
clusterExport(cl, list=c("some_function", "some_list"))
parLapply(cl, some_list, function(x) some_function(x))
stopCluster(cl)
}, error=function(e) {
stopCluster(cl)
return(e)
}, finally = {
try(stopCluster(cl), silent = T)
})
例外処理なしでpblapply
/を使用した例を次に示します。mclapply
pblapply(cl = detectCores()-1, some_list, function(x) some_function(x))