在R中运行异步函数

时间:2016-12-09 10:07:36

标签: r multithreading asynchronous parallel-processing

我有以下代码:

myfun <- function() {
  fun2()

  return(1+1)
}

我想调用fun2()然后移动到下一行而不等待结果。函数fun2没有返回任何内容,我不在乎它什么时候完成,我只需要启动它。实现它的最佳方法是什么?并行进程,多线程,异步调用?任何代码示例都表示赞赏。

2 个答案:

答案 0 :(得分:6)

future package(我是作者)提供了这个:

library("future")
plan(multiprocess)

myfun <- function() {
  future(fun2())

  return(1+1)
}

除非fun2()的功能纯粹用于其副作用,否则您通常希望检索该未来表达式的值,您可以这样做:

f <- future(fun2())
y <- fun3()
v <- value(f)
z <- v + y

另一种方法是使用%<-%运算符,如:

v %<-% fun2()
y <- fun3()
z <- v + y

仅供参考,如果您使用

plan(cluster, workers = c("n1", "n3", "remote.server.org"))

然后在其中一台机器上解析未来的表达式。使用

plan(future.BatchJobs::batchjobs_slurm)

将导致它通过Slurm作业调度程序队列解析。

答案 1 :(得分:2)

最终我停止了以下解决方案:

Rpath <- Find(file.exists, c(commandArgs()[[1]], file.path(R.home("bin"), commandArgs()[[1]]),
                             file.path(R.home("bin"), "R"), file.path(R.home("bin"), "Rscript.exe")))
out <- system('%s --no-save --slave -e \"Your R code here\" ', wait=FALSE)

第一行搜索R可执行文件的路径,第二行从命令行环境执行R代码而不等待结果。