运行 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
不同,似乎不适合创建集群。有关环境的更多信息,另请参阅 。
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
不同,似乎不适合创建集群。有关环境的更多信息,另请参阅