我一直在寻找替代方法,furrr:future_map()
因为当此函数在另一个函数中运行时,它会将在该函数中定义的所有对象复制到每个工作人员,而不管这些对象是否被显式传递(https://github.com/DavisVaughan/furrr/issues/ 26 )。
使用时看起来像parLapply()
做同样的事情clusterExport()
:
fun <- function(x) {
big_obj <- 1
cl <- parallel::makeCluster(2)
parallel::clusterExport(cl, c("x"), envir = environment())
parallel::parLapply(cl, c(1), function(x) {
x + 1
env <- environment()
parent_env <- parent.env(env)
return(list(this_env = env, parent_env = parent_env))
})
}
res <- fun(1)
names(res[[1]]$parent_env)
#> [1] "cl" "big_obj" "x"
由reprex 包(v0.3.0)于 2020-01-06 创建
我怎样才能big_obj
避免被复制到每个工人?我使用的是 Windows 机器,所以分叉不是一种选择。