我在 Linux (R 3.6.0) 上提交了如下两个工作。请参见下面的示例代码。
library("future")
plan(multicore)
job1 <- future({
print("job1")
})
job2 <- future({
print("job2")
})
while (!resolved(job1)) {
Sys.sleep(0.2)
}
while (!resolved(job2)) {
Sys.sleep(0.2)
}
如果由于数据大小而导致作业花费超过 3 分钟,那么我将遇到错误。如果数据很小,那么我不会出错。我错过了什么吗?
sendMaster(try(eval(expr, env),silent = TRUE)) 中的错误:忽略 SIGPIPE 信号调用:source ... run.MulticoreFuture -> do.call -> -> sendMaster
其他参考:
我发现在不同的博客上已经讨论了类似的问题。听起来错误已在 R 3.6.0 中修复,但即使使用 R 3.6.0 我仍然得到它
https://r.789695.n4.nabble.com/error-in-parallel-sendMaster-td4760382.html
https://github.com/wch/r-source/commit/e08cffac1c5b9015a1625938d568b648eb1d8aee
我的 job1 和 job2 是独立的并将输出写入文件,因此我不需要将任何内容发送回主作业。有什么方法可以在工作中定义说没有必要将任何东西发回主要工作?
更新
如果我使用计划(多会话),我不会收到错误消息
会话和核心信息
sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Amazon Linux AMI 2018.03
Matrix products: default
BLAS: /usr/local/R/R-3.6.0/lib/libRblas.so
LAPACK: /usr/local/R/R-3.6.0/lib/libRlapack.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] future_1.17.0
loaded via a namespace (and not attached):
[1] compiler_3.6.0 tools_3.6.0 parallel_3.6.0 listenv_0.8.0
[5] codetools_0.2-16 digest_0.6.24 globals_0.12.5
future::availableCores(constraint = 'multicore')
system
2