我正在尝试使用多会话并行性运行 R 代码,以便所有错误消息都重定向到同一个文件。但是,sink()无法创建。
library(parallel)
cl <- makePSOCKcluster(2)
f <- function(){
withr::with_message_sink("messages.txt", Sys.sleep(10))
}
clusterCall(cl = cl, fun = f)
## Error in checkForRemoteErrors(lapply(cl, recvResult)) :
## 2 nodes produced errors; first error: Cannot establish message sink when another sink is active.
## Calls: clusterCall -> checkForRemoteErrors
## Execution halted
编辑
鉴于一些回应,我应该详细说明这篇文章的目的。我正在开发drake,一个具有多个并行后端的 R 包。今天,我实现了一个新的hook参数,make()它只是将单个并行作业包装在用户选择的函数中。我真正在寻找的是一种hook不管并行后端如何都能使控制台静音的方法。当前开发版本中的后端包括
parallel::mclapply()parallel::parLapply()base::lapply()(通过parLapply()一份工作)make -j用适当的Makefilefuture::sequentialfuture::multicorefuture::multisessionfuture.batchtools此处列出的后端
我以为我找到了一个hook适用于标准错误的方法。
hook <- function(){
withr::with_message_sink("messages.txt", Sys.sleep(10))
}
但是,withr::with_message_sink()不允许我将多个工作人员下沉到相同的文件parLapply()或future::multisession后端。