我正在使用pblapply
参数cl
设置为整数而不是集群对象的函数。这导致pblapply
调用mclapply
而不是parLapply
. 无需担心以clusterExport
这种方式将正确的对象输入到函数中,我发现这可以改善我的整体工作流程。但是,如果我需要手动中断对pblapply
RStudio 内的调用(单击停止符号),会话将挂起,我最终会得到一堆需要通过终端手动终止的失控内核。
请注意,此问题特定于 RStudio;使用从终端运行相同的代码Rscript
并手动中断 viaCTRL-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))