我正在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是独立的,并且将输出写入文件,因此我不需要将任何内容发送回主作业。我可以在工作中定义任何方法来说没有必要将任何东西发回主工作吗?
更新
如果我使用plan(multisession),我不会收到错误消息
会话和核心信息
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