我有三项任务:
3的结果会告诉我,我想要的答案是来自任务1还是任务2。由于每个任务都需要单独的资源,所以我想用me并行启动所有三个任务,然后等待第三个任务的结果,然后决定是终止任务1还是任务2。然而,我无法确定如何在R中过早地取消mc并行任务。如果没有,是否有更好的方法来取消不必要的计算?
发布于 2015-02-06 23:15:35
我不认为parallel包支持一种正式的方式来扼杀通过mcparallel启动的进程,但我的猜测是这样做是安全的,您可以使用来自tools包的pskill函数来完成它。下面是一个例子:
library(parallel)
library(tools)
fun1 <- function() {Sys.sleep(20); 1}
fun2 <- function() {Sys.sleep(20); 2}
fun3 <- function() {Sys.sleep(5); sample(2, 1)}
f1 <- mcparallel(fun1())
f2 <- mcparallel(fun2())
f3 <- mcparallel(fun3())
r <- mccollect(f3)
if (r[[1]] == 1) {
cat('killing fun1...\n')
pskill(f1$pid)
print(mccollect(f1))
r <- mccollect(f2)
} else {
cat('killing fun2...\n')
pskill(f2$pid)
print(mccollect(f2))
r <- mccollect(f1)
}
print(r)在多线程应用程序中随机终止线程通常是危险的,因为它们可能持有某种类型的共享锁,但这些当然是进程,主进程似乎处理得很好。
发布于 2021-08-16 07:53:32
当前版本的并行::mccollect()支持wait参数。
只需传递FALSE,就可以过早退出任何正在运行的作业。
> mccollect(wait = FALSE)https://stackoverflow.com/questions/28372230
复制相似问题