Я искал альтернативу 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"
Создано в 2020-01-06 представ пакет (v0.3.0)
Как я могу предотвратить копирование big_obj
каждому работнику? Я использую Windows машину, поэтому разветвление не вариант.