过早停止正在运行的mcparallel作业
我有三项任务:过早停止正在运行的mcparallel作业,r,parallel-processing,R,Parallel Processing,我有三项任务: 磁盘I/O绑定了吗 网络I/O是否绑定 CPU是否绑定在远程计算机上 3的结果将告诉我我想要的答案是来自任务1还是任务2。由于每个任务都需要单独的资源,因此我希望使用mcparallel启动所有三个任务,然后等待第三个任务的结果,并确定是否终止任务1或任务2。但是,我无法确定如何过早地从R中取消mcparallel任务。通过调用system()终止分叉进程的PID是否安全?如果没有,是否有更好的方法来取消不必要的计算?我认为并行包不支持通过mcparallel启动的进程的正式终止
3的结果将告诉我我想要的答案是来自任务1还是任务2。由于每个任务都需要单独的资源,因此我希望使用mcparallel启动所有三个任务,然后等待第三个任务的结果,并确定是否终止任务1或任务2。但是,我无法确定如何过早地从R中取消mcparallel任务。通过调用system()终止分叉进程的PID是否安全?如果没有,是否有更好的方法来取消不必要的计算?我认为
并行包不支持通过mcparallel
启动的进程的正式终止方法,但我猜这样做是安全的,您可以使用工具包中的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)
库(并行)
图书馆(工具)
fun1看起来很简单,我已经试过几次了,杀死并行pid似乎没有副作用+1用于工具中的pskill。