我正在尝试使用多会话并行性运行 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
用适当的Makefile
future::sequential
future::multicore
future::multisession
future.batchtools
此处列出的后端
我以为我找到了一个hook
适用于标准错误的方法。
hook <- function(){
withr::with_message_sink("messages.txt", Sys.sleep(10))
}
但是,withr::with_message_sink()
不允许我将多个工作人员下沉到相同的文件parLapply()
或future::multisession
后端。