各スレッド内で(パッケージ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
実際、 with を呼び出すforeach
と.export = "testfn"
同じエラーが発生します。
それで、何がうまくいかないのですか?
(なぜ私はこれをしたいのですか?最終的には、一定の時間間隔で非同期的に多数のデータ ソースをポーリングし、各データ ソースには独自の特定のポーリング間隔がある場合)