我不认为parallel
包支持一个正式的方式来杀死一个进程通过mcparallel
开始了,但我的猜测是,它的安全做的,你可以使用pskill
功能从tools
包做。这里有一个例子:
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)
它通常是危险的多线程应用程序中随意杀死线程,因为它们可能会持有某种类型的共享锁,但这些当然是过程,而主进程似乎处理情况就好了。
似乎很简单,我现在试了几次,并杀死平行pid似乎没有不良副作用。工具中的pskill +1。 – russellpierce 2015-02-08 17:26:28