我什至不知道可以分叉这样的进程。玩了一会儿后,我找到了该sendChildStdin
功能,您应该检查一下。这至少是向子进程发出信号的一种方式。这是一个例子:
f<- function () {
message<-scan(n = 1, quiet = TRUE, what='character')
return(message)
}
p <- mcparallel(f())
a <- 1
# The message shouldn't contain spaces and should end with a newline.
parallel:::sendChildStdin(p, "created\n")
mccollect(p)[[1]]
[1] "created"
不要误会我的意思;如果您要深入研究这些东西,R 可能不是您想要的语言,但它可能适用于轻量级应用程序。
我之前在 RStudio 中测试过代码,虽然它看起来可以工作,但失败的方式与成功无法区分。无论如何,它基本上不会等待该scan
过程。例如,这不应该完成,但它确实(仅在 RStudio 中)
f<- function () {
message<-scan(n = 1, quiet = TRUE, what='character')
return(message)
}
p <- mcparallel(f())
# parallel:::sendChildStdin(p, "created\n")
mccollect(p)[[1]]
# character(0)