为什么这很重要
对于drake
,我希望用户能够mclapply()
在锁定的全局环境中执行调用。为了重现性,环境被锁定。如果没有锁定,数据分析管道可能会使自己失效。
mclapply()
添加或删除全局绑定的证据
set.seed(0)
a <- 1
# Works as expected.
rnorm(1)
#> [1] 1.262954
tmp <- parallel::mclapply(1:2, identity, mc.cores = 2)
# No new bindings allowed.
lockEnvironment(globalenv())
# With a locked environment
a <- 2 # Existing bindings are not locked.
b <- 2 # As expected, we cannot create new bindings.
#> Error in eval(expr, envir, enclos): cannot add bindings to a locked environment
tmp <- parallel::mclapply(1:2, identity, mc.cores = 2) # Unexpected error.
#> Warning in parallel::mclapply(1:2, identity, mc.cores = 2): all scheduled
#> cores encountered errors in user code
由reprex 包(v0.2.1)于 2019 年 1 月 16 日创建
编辑
对于最初的激励问题,请参阅https://github.com/ropensci/drake/issues/675和https://ropenscilabs.github.io/drake-manual/hpc.html#parallel-computing-within-targets。