在withTimeout中运行makeCluster不起作用

时间:2019-10-11 03:40:01

标签: r doparallel

makeCluster函数有时会挂在我的代码中,只需要重新运行即可解决该问题。

为了在我的代码中做到这一点,我试图使用while循环以及withTimeout函数,以使makeCluster函数在挂起时超时并重新运行。

问题在于,当我使用withTimeout创建集群时,以后无法并行访问该集群了。

library(parallel)
library(R.utils)
library(pbapply)


 cl = NULL

while( is.null(cl) ){

cl =  withTimeout({makeCluster(4,type = 'FORK')},timeout=3,
                         onTimeout="silent",envir = environment())
}

pblapply(1:3, function(x){x+1},cl = cl)

我收到的错误消息是:

序列化错误(data,node $ con,xdr = FALSE):   写入连接时出错

1 个答案:

答案 0 :(得分:1)

未设置envir的{​​{1}}参数时,将在withTimeout()中创建集群,并且一切都会按预期进行。

.GlobalEnv

在问题中设置library(parallel) library(R.utils) library(pbapply) cl <- NULL while(is.null(cl)){ cl <- withTimeout(makeCluster(4, type='FORK'), timeout=3, onTimeout="silent") } pblapply(1:3, function(x){x+1}, cl = cl) |++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=00s [[1]] [1] 2 [[2]] [1] 3 [[3]] [1] 4 ,它将解决函数的调用环境。后者与envir = environment()不同,似乎不适合创建集群。有关环境的更多信息,另请参见R eval(): changed behavior when argument 'envir' is explicitly set to default value