在Windows上,R(foreach,parLapply)中通常的并行化方法将等到他们的工作人员都完成之后才允许父进程继续运行。我想启动一个子进程,而不是在运行我的其他代码之前等待它完成它的任务(仅为其副作用运行该子进程)。看起来这种行为可以通过并行包中的mcparallel
函数获得 - 但不能在Windows上使用,因为它依赖于分叉!我的工作要求我使用Windows,那么有一种Windows友好的方式吗?
答案 0 :(得分:2)
future包(我是作者)以跨平台的方式支持这一点。例如,
library("future")
plan(multiprocess)
f1 <- future({ asynchronous code evaluated in the background })
f2 <- future({ some other asynchronous code })
v3 <- my_synchronous_code()
v1 <- value(f1) # get value of f1 expression - wait if not done
v2 <- value(f2) # get value of f2 expression - wait if not done
y <- f(v1, v2)
或等效使用未来的赋值运算符:
library("future")
plan(multiprocess)
v1 %<-% { asynchronous code evaluated in the background }
v2 %<-% { some other asynchronous code }
v3 <- my_synchronous_code()
y <- f(v1, v2) # "use" value of v1 and v2 expressions - wait if not done