作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 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,result\n", file = "results.csv")
outputs <- try({future_lapply(1:100, func)}, silent = TRUE)
if(!is.list(outputs)) stop("10 first simulations returned FALSE")
关于r - R中的并行处理函数(如future_apply)是否有提前终止选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385762/
我用 future_lapply()在 Linux 机器上并行我的代码。如果我提前终止进程,只有一名 worker 被释放并且并行进程继续存在。我知道我可以输入tools::pskill(PID)结束
我是一名优秀的程序员,十分优秀!