r - 在 RStudio 中手动中断时优雅地停止 mclapply 集群?
问题描述
我正在使用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))
解决方案
推荐阅读
- java - 为什么 Spring boot 无法识别我的第二个数据源配置?
- sql - 如何获取在 for 循环中创建的变量名
- swift - 在 Swift 中写入 Firestore 时,如何将 addSnapshotListener 方法与 getDocument 一起使用?
- mysql - 将一个表插入另一个表时,如何避免出现“主键的重复条目'1'”错误?
- html - 如何选择h4标题
- java - 如何将此parcelable数组列表转换为实现parcelable的胆固醇监视器数组列表?
- typescript - A扩展B;输入'选择> & B' 不可分配给类型 'A'.ts(2322)
- .net - .NET Framework 到 .NET Core 迁移序列化问题
- php - Laravel 返回 UnexpectedValueException
- java - 使用 Vaadin Grid 下载 txt 中的选定行