R中的并行处理函数(如future_apply)中是否有提前终止选项



我在R代码中使用future.apply包对优化问题的100个蒙特卡罗模拟进行并行处理。

现在,让我们假设每个模拟的优化输出要么是True(找到最佳解决方案(,要么是False。我是否可以设置条件,以便如果前10个模拟返回False,则并行过程将终止?

编辑:我在下面包含一个小示例-我可以在运行10次后终止它吗?

library(future.apply)
plan(multiprocess)
outputs <- future_lapply(1:100, function(i){
temp <- FALSE
return(temp)
})

您可以使用一个中间文件,在其中写入每个模拟的结果。每次启动新的模拟时,都要检查前10个结果是否为FALSE,如果是,则要求线程自行终止。future_lapply()必须在try()包装器中使用,因为该函数显然会失败。

library(future.apply)
library(tools)
func <- function(i){
tbl_results <- read.csv("results.csv")
results <- tbl_results[, 2]

if(length(results) >= 10 & all(results[1:10] == FALSE)) pskill(Sys.getpid())

result <- FALSE

cat(paste0(i, ",", result, "n"), file = "results.csv", append = TRUE)
return(result)
}

plan(multiprocess)
cat("input,resultn", file = "results.csv")
outputs <- try({future_lapply(1:100, func)}, silent = TRUE)
if(!is.list(outputs)) stop("10 first simulations returned FALSE")

最新更新