我想在每个线程内执行一个tclTaskSchedule
计时器(从包中)。但是,以下最小代码tcltk2
doParallel
library(doParallel)
n <- detectCores()
cl <- makeCluster(n, outfile="out.log")
registerDoParallel(cl)
testfn <- function() print(paste("hello from", i))
foreach(i=1:n, .packages = c("tcltk", "tcltk2"), .verbose = T) %dopar% {
tclTaskSchedule(1000, testfn(), id = paste0("task", i), redo = 10)
}
stopCluster(cl)
导致错误(不是在控制台中打印,而是在 中out.log
)
Error in eval(expr, envir, enclos) : could not find function "testfn"
但是,从.verbose = T
参数中,我可以从正在导出的控制台中testfn
看到:
automatically exporting the following variables from the local environment:
testfn
实际上,调用foreach
with.export = "testfn"
会导致相同的错误。
那么出了什么问题呢?
(我为什么要这样做?最后,我想以固定的时间间隔异步轮询多个数据源,并且每个数据源都有自己特定的轮询间隔)