4

我在 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
4

0 回答 0