1

我正在使用pblapply参数cl设置为整​​数而不是集群对象的函数。这导致pblapply调用mclapply而不是parLapply. 无需担心以clusterExport这种方式将正确的对象输入到函数中,我发现这可以改善我的整体工作流程。但是,如果我需要手动中断对pblapplyRStudio 内的调用(单击停止符号),会话将挂起,我最终会得到一堆需要通过终端手动终止的失控内核。

请注意,此问题特定于 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))
4

0 回答 0