运行 withTimeout 内的 makeCluster 不工作

Running makeCluster within withTimeout does not work

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

为了在我的代码中做到这一点,我尝试使用 while 循环和 withTimeout 函数来使 makeCluster 函数超时(如果它挂起并重新运行)。

问题是,当我使用 withTimeout 创建我的集群时,我以后无法为我的并行访问它 lapply。

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)

我收到的错误消息是:

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

withTimeout()envir 参数未设置时,集群在 .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(),会解析到函数的调用环境。后者与 .GlobalEnv 不同,似乎不适合创建集群。有关环境的更多信息,另请参阅